package com.gksc.video.device;

import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.examples.win32.GDI32.RECT;
import com.sun.jna.examples.win32.W32API;
import com.sun.jna.examples.win32.W32API.HDC;
import com.sun.jna.examples.win32.W32API.HWND;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.NativeLongByReference;
import com.sun.jna.ptr.ShortByReference;
import com.sun.jna.win32.StdCallLibrary;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @className: HCNetSDK
 * @description: 海康威视sdk接口
 * @author: Liao.yx
 * @email: 1229053515@qq.com
 * @create: 2020年4月27日17:02:36
 * @copyRight: 2020 liaoyongxiang All rights reserved.
 **/
public interface HCNetSDK extends StdCallLibrary {
    HCNetSDK INSTANCE = Native.load("HCNetSDK", HCNetSDK.class);
    int MAX_NAMELEN = 16;
    int MAX_RIGHT = 32;
    int STREAM_ID_LEN = 32;
    int NAME_LEN = 32;
    int PASSWD_LEN = 16;
    int SERIALNO_LEN = 48;
    int MACADDR_LEN = 6;
    int MAX_ETHERNET = 2;
    int PATHNAME_LEN = 128;
    int MAX_TIMESEGMENT_V30 = 8;
    int MAX_TIMESEGMENT = 4;
    int MAX_SHELTERNUM = 4;
    int MAX_DAYS = 7;
    int PHONENUMBER_LEN = 32;
    int MAX_DISKNUM_V30 = 33;
    int MAX_DISKNUM = 16;
    int MAX_DISKNUM_V10 = 8;
    int MAX_WINDOW_V30 = 32;
    int MAX_WINDOW = 16;
    int MAX_VGA_V30 = 4;
    int MAX_VGA = 1;
    int MAX_USERNUM_V30 = 32;
    int MAX_USERNUM = 16;
    int MAX_EXCEPTIONNUM_V30 = 32;
    int MAX_EXCEPTIONNUM = 16;
    int MAX_LINK = 6;
    int MAX_DECPOOLNUM = 4;
    int MAX_DECNUM = 4;
    int MAX_TRANSPARENTNUM = 2;
    int MAX_CYCLE_CHAN = 16;
    int MAX_DIRNAME_LENGTH = 80;
    int MAX_STRINGNUM_V30 = 8;
    int MAX_STRINGNUM = 4;
    int MAX_STRINGNUM_EX = 8;
    int MAX_AUXOUT_V30 = 16;
    int MAX_AUXOUT = 4;
    int MAX_HD_GROUP = 16;
    int MAX_NFS_DISK = 8;
    int IW_ESSID_MAX_SIZE = 32;
    int IW_ENCODING_TOKEN_MAX = 32;
    int MAX_SERIAL_NUM = 64;
    int MAX_DDNS_NUMS = 10;
    int MAX_DOMAIN_NAME = 64;
    int MAX_EMAIL_ADDR_LEN = 48;
    int MAX_EMAIL_PWD_LEN = 32;
    int MAXPROGRESS = 100;
    int MAX_SERIALNUM = 2;
    int CARDNUM_LEN = 20;
    int MAX_VIDEOOUT_V30 = 4;
    int MAX_VIDEOOUT = 2;
    int MAX_PRESET_V30 = 256;
    int MAX_TRACK_V30 = 256;
    int MAX_CRUISE_V30 = 256;
    int MAX_PRESET = 128;
    int MAX_TRACK = 128;
    int MAX_CRUISE = 128;
    int CRUISE_MAX_PRESET_NUMS = 32;
    int MAX_SERIAL_PORT = 8;
    int MAX_PREVIEW_MODE = 8;
    int MAX_MATRIXOUT = 16;
    int LOG_INFO_LEN = 11840;
    int DESC_LEN = 16;
    int PTZ_PROTOCOL_NUM = 200;
    int MAX_AUDIO = 1;
    int MAX_AUDIO_V30 = 2;
    int MAX_CHANNUM = 16;
    int MAX_ALARMIN = 16;
    int MAX_ALARMOUT = 4;
    int MAX_ANALOG_CHANNUM = 32;
    int MAX_ANALOG_ALARMOUT = 32;
    int MAX_ANALOG_ALARMIN = 32;
    int MAX_IP_DEVICE = 32;
    int MAX_IP_CHANNEL = 32;
    int MAX_IP_ALARMIN = 128;
    int MAX_IP_ALARMOUT = 64;
    int MAX_CHANNUM_V30 = 64;
    int MAX_ALARMOUT_V30 = 96;
    int MAX_ALARMIN_V30 = 160;
    int MAX_LICENSE_LEN = 16;
    int VCA_MAX_POLYGON_POINT_NUM = 10;
    int MAX_ID_NUM_LEN = 32;
    int MAX_ID_NAME_LEN = 128;
    int MAX_ID_ADDR_LEN = 280;
    int MAX_ID_ISSUING_AUTHORITY_LEN = 128;
    int NET_DVR_NOERROR = 0;
    int NET_DVR_PASSWORD_ERROR = 1;
    int NET_DVR_NOENOUGHPRI = 2;
    int NET_DVR_NOINIT = 3;
    int NET_DVR_CHANNEL_ERROR = 4;
    int NET_DVR_OVER_MAXLINK = 5;
    int NET_DVR_VERSIONNOMATCH = 6;
    int NET_DVR_NETWORK_FAIL_CONNECT = 7;
    int NET_DVR_NETWORK_SEND_ERROR = 8;
    int NET_DVR_NETWORK_RECV_ERROR = 9;
    int NET_DVR_NETWORK_RECV_TIMEOUT = 10;
    int NET_DVR_NETWORK_ERRORDATA = 11;
    int NET_DVR_ORDER_ERROR = 12;
    int NET_DVR_OPERNOPERMIT = 13;
    int NET_DVR_COMMANDTIMEOUT = 14;
    int NET_DVR_ERRORSERIALPORT = 15;
    int NET_DVR_ERRORALARMPORT = 16;
    int NET_DVR_PARAMETER_ERROR = 17;
    int NET_DVR_CHAN_EXCEPTION = 18;
    int NET_DVR_NODISK = 19;
    int NET_DVR_ERRORDISKNUM = 20;
    int NET_DVR_DISK_FULL = 21;
    int NET_DVR_DISK_ERROR = 22;
    int NET_DVR_NOSUPPORT = 23;
    int NET_DVR_BUSY = 24;
    int NET_DVR_MODIFY_FAIL = 25;
    int NET_DVR_PASSWORD_FORMAT_ERROR = 26;
    int NET_DVR_DISK_FORMATING = 27;
    int NET_DVR_DVRNORESOURCE = 28;
    int NET_DVR_DVROPRATEFAILED = 29;
    int NET_DVR_OPENHOSTSOUND_FAIL = 30;
    int NET_DVR_DVRVOICEOPENED = 31;
    int NET_DVR_TIMEINPUTERROR = 32;
    int NET_DVR_NOSPECFILE = 33;
    int NET_DVR_CREATEFILE_ERROR = 34;
    int NET_DVR_FILEOPENFAIL = 35;
    int NET_DVR_OPERNOTFINISH = 36;
    int NET_DVR_GETPLAYTIMEFAIL = 37;
    int NET_DVR_PLAYFAIL = 38;
    int NET_DVR_FILEFORMAT_ERROR = 39;
    int NET_DVR_DIR_ERROR = 40;
    int NET_DVR_ALLOC_RESOURCE_ERROR = 41;
    int NET_DVR_AUDIO_MODE_ERROR = 42;
    int NET_DVR_NOENOUGH_BUF = 43;
    int NET_DVR_CREATESOCKET_ERROR = 44;
    int NET_DVR_SETSOCKET_ERROR = 45;
    int NET_DVR_MAX_NUM = 46;
    int NET_DVR_USERNOTEXIST = 47;
    int NET_DVR_WRITEFLASHERROR = 48;
    int NET_DVR_UPGRADEFAIL = 49;
    int NET_DVR_CARDHAVEINIT = 50;
    int NET_DVR_PLAYERFAILED = 51;
    int NET_DVR_MAX_USERNUM = 52;
    int NET_DVR_GETLOCALIPANDMACFAIL = 53;
    int NET_DVR_NOENCODEING = 54;
    int NET_DVR_IPMISMATCH = 55;
    int NET_DVR_MACMISMATCH = 56;
    int NET_DVR_UPGRADELANGMISMATCH = 57;
    int NET_DVR_MAX_PLAYERPORT = 58;
    int NET_DVR_NOSPACEBACKUP = 59;
    int NET_DVR_NODEVICEBACKUP = 60;
    int NET_DVR_PICTURE_BITS_ERROR = 61;
    int NET_DVR_PICTURE_DIMENSION_ERROR = 62;
    int NET_DVR_PICTURE_SIZ_ERROR = 63;
    int NET_DVR_LOADPLAYERSDKFAILED = 64;
    int NET_DVR_LOADPLAYERSDKPROC_ERROR = 65;
    int NET_DVR_LOADDSSDKFAILED = 66;
    int NET_DVR_LOADDSSDKPROC_ERROR = 67;
    int NET_DVR_DSSDK_ERROR = 68;
    int NET_DVR_VOICEMONOPOLIZE = 69;
    int NET_DVR_JOINMULTICASTFAILED = 70;
    int NET_DVR_CREATEDIR_ERROR = 71;
    int NET_DVR_BINDSOCKET_ERROR = 72;
    int NET_DVR_SOCKETCLOSE_ERROR = 73;
    int NET_DVR_USERID_ISUSING = 74;
    int NET_DVR_SOCKETLISTEN_ERROR = 75;
    int NET_DVR_PROGRAM_EXCEPTION = 76;
    int NET_DVR_WRITEFILE_FAILED = 77;
    int NET_DVR_FORMAT_READONLY = 78;
    int NET_DVR_WITHSAMEUSERNAME = 79;
    int NET_DVR_DEVICETYPE_ERROR = 80;
    int NET_DVR_LANGUAGE_ERROR = 81;
    int NET_DVR_PARAVERSION_ERROR = 82;
    int NET_DVR_IPCHAN_NOTALIVE = 83;
    int NET_DVR_RTSP_SDK_ERROR = 84;
    int NET_DVR_CONVERT_SDK_ERROR = 85;
    int NET_DVR_IPC_COUNT_OVERFLOW = 86;
    int NET_PLAYM4_NOERROR = 500;
    int NET_PLAYM4_PARA_OVER = 501;
    int NET_PLAYM4_ORDER_ERROR = 502;
    int NET_PLAYM4_TIMER_ERROR = 503;
    int NET_PLAYM4_DEC_VIDEO_ERROR = 504;
    int NET_PLAYM4_DEC_AUDIO_ERROR = 505;
    int NET_PLAYM4_ALLOC_MEMORY_ERROR = 506;
    int NET_PLAYM4_OPEN_FILE_ERROR = 507;
    int NET_PLAYM4_CREATE_OBJ_ERROR = 508;
    int NET_PLAYM4_CREATE_DDRAW_ERROR = 509;
    int NET_PLAYM4_CREATE_OFFSCREEN_ERROR = 510;
    int NET_PLAYM4_BUF_OVER = 511;
    int NET_PLAYM4_CREATE_SOUND_ERROR = 512;
    int NET_PLAYM4_SET_VOLUME_ERROR = 513;
    int NET_PLAYM4_SUPPORT_FILE_ONLY = 514;
    int NET_PLAYM4_SUPPORT_STREAM_ONLY = 515;
    int NET_PLAYM4_SYS_NOT_SUPPORT = 516;
    int NET_PLAYM4_FILEHEADER_UNKNOWN = 517;
    int NET_PLAYM4_VERSION_INCORRECT = 518;
    int NET_PALYM4_INIT_DECODER_ERROR = 519;
    int NET_PLAYM4_CHECK_FILE_ERROR = 520;
    int NET_PLAYM4_INIT_TIMER_ERROR = 521;
    int NET_PLAYM4_BLT_ERROR = 522;
    int NET_PLAYM4_UPDATE_ERROR = 523;
    int NET_PLAYM4_OPEN_FILE_ERROR_MULTI = 524;
    int NET_PLAYM4_OPEN_FILE_ERROR_VIDEO = 525;
    int NET_PLAYM4_JPEG_COMPRESS_ERROR = 526;
    int NET_PLAYM4_EXTRACT_NOT_SUPPORT = 527;
    int NET_PLAYM4_EXTRACT_DATA_ERROR = 528;
    int NET_DVR_SUPPORT_DDRAW = 1;
    int NET_DVR_SUPPORT_BLT = 2;
    int NET_DVR_SUPPORT_BLTFOURCC = 4;
    int NET_DVR_SUPPORT_BLTSHRINKX = 8;
    int NET_DVR_SUPPORT_BLTSHRINKY = 16;
    int NET_DVR_SUPPORT_BLTSTRETCHX = 32;
    int NET_DVR_SUPPORT_BLTSTRETCHY = 64;
    int NET_DVR_SUPPORT_SSE = 128;
    int NET_DVR_SUPPORT_MMX = 256;
    int LIGHT_PWRON = 2;
    int WIPER_PWRON = 3;
    int FAN_PWRON = 4;
    int HEATER_PWRON = 5;
    int AUX_PWRON1 = 6;
    int AUX_PWRON2 = 7;
    int SET_PRESET = 8;
    int CLE_PRESET = 9;
    int ZOOM_IN = 11;
    int ZOOM_OUT = 12;
    int FOCUS_NEAR = 13;
    int FOCUS_FAR = 14;
    int IRIS_OPEN = 15;
    int IRIS_CLOSE = 16;
    int TILT_UP = 21;
    int TILT_DOWN = 22;
    int PAN_LEFT = 23;
    int PAN_RIGHT = 24;
    int UP_LEFT = 25;
    int UP_RIGHT = 26;
    int DOWN_LEFT = 27;
    int DOWN_RIGHT = 28;
    int PAN_AUTO = 29;
    int FILL_PRE_SEQ = 30;
    int SET_SEQ_DWELL = 31;
    int SET_SEQ_SPEED = 32;
    int CLE_PRE_SEQ = 33;
    int STA_MEM_CRUISE = 34;
    int STO_MEM_CRUISE = 35;
    int RUN_CRUISE = 36;
    int RUN_SEQ = 37;
    int STOP_SEQ = 38;
    int GOTO_PRESET = 39;
    int NET_DVR_PLAYSTART = 1;
    int NET_DVR_PLAYSTOP = 2;
    int NET_DVR_PLAYPAUSE = 3;
    int NET_DVR_PLAYRESTART = 4;
    int NET_DVR_PLAYFAST = 5;
    int NET_DVR_PLAYSLOW = 6;
    int NET_DVR_PLAYNORMAL = 7;
    int NET_DVR_PLAYFRAME = 8;
    int NET_DVR_PLAYSTARTAUDIO = 9;
    int NET_DVR_PLAYSTOPAUDIO = 10;
    int NET_DVR_PLAYAUDIOVOLUME = 11;
    int NET_DVR_PLAYSETPOS = 12;
    int NET_DVR_PLAYGETPOS = 13;
    int NET_DVR_PLAYGETTIME = 14;
    int NET_DVR_PLAYGETFRAME = 15;
    int NET_DVR_GETTOTALFRAMES = 16;
    int NET_DVR_GETTOTALTIME = 17;
    int NET_DVR_THROWBFRAME = 20;
    int NET_DVR_SETSPEED = 24;
    int NET_DVR_KEEPALIVE = 25;
    int KEY_CODE_1 = 1;
    int KEY_CODE_2 = 2;
    int KEY_CODE_3 = 3;
    int KEY_CODE_4 = 4;
    int KEY_CODE_5 = 5;
    int KEY_CODE_6 = 6;
    int KEY_CODE_7 = 7;
    int KEY_CODE_8 = 8;
    int KEY_CODE_9 = 9;
    int KEY_CODE_0 = 10;
    int KEY_CODE_POWER = 11;
    int KEY_CODE_MENU = 12;
    int KEY_CODE_ENTER = 13;
    int KEY_CODE_CANCEL = 14;
    int KEY_CODE_UP = 15;
    int KEY_CODE_DOWN = 16;
    int KEY_CODE_LEFT = 17;
    int KEY_CODE_RIGHT = 18;
    int KEY_CODE_EDIT = 19;
    int KEY_CODE_ADD = 20;
    int KEY_CODE_MINUS = 21;
    int KEY_CODE_PLAY = 22;
    int KEY_CODE_REC = 23;
    int KEY_CODE_PAN = 24;
    int KEY_CODE_M = 25;
    int KEY_CODE_A = 26;
    int KEY_CODE_F1 = 27;
    int KEY_CODE_F2 = 28;
    int KEY_PTZ_UP_START = 15;
    int KEY_PTZ_UP_STO = 32;
    int KEY_PTZ_DOWN_START = 16;
    int KEY_PTZ_DOWN_STOP = 33;
    int KEY_PTZ_LEFT_START = 17;
    int KEY_PTZ_LEFT_STOP = 34;
    int KEY_PTZ_RIGHT_START = 18;
    int KEY_PTZ_RIGHT_STOP = 35;
    int KEY_PTZ_AP1_START = 19;
    int KEY_PTZ_AP1_STOP = 36;
    int KEY_PTZ_AP2_START = 24;
    int KEY_PTZ_AP2_STOP = 37;
    int KEY_PTZ_FOCUS1_START = 26;
    int KEY_PTZ_FOCUS1_STOP = 38;
    int KEY_PTZ_FOCUS2_START = 25;
    int KEY_PTZ_FOCUS2_STOP = 39;
    int KEY_PTZ_B1_START = 40;
    int KEY_PTZ_B1_STOP = 41;
    int KEY_PTZ_B2_START = 42;
    int KEY_PTZ_B2_STOP = 43;
    int KEY_CODE_11 = 44;
    int KEY_CODE_12 = 45;
    int KEY_CODE_13 = 46;
    int KEY_CODE_14 = 47;
    int KEY_CODE_15 = 48;
    int KEY_CODE_16 = 49;
    int NET_DVR_GET_DEVICECFG = 100;
    int NET_DVR_SET_DEVICECFG = 101;
    int NET_DVR_GET_NETCFG = 102;
    int NET_DVR_SET_NETCFG = 103;
    int NET_DVR_GET_PICCFG = 104;
    int NET_DVR_SET_PICCFG = 105;
    int NET_DVR_GET_COMPRESSCFG = 106;
    int NET_DVR_SET_COMPRESSCFG = 107;
    int NET_DVR_GET_RECORDCFG = 108;
    int NET_DVR_SET_RECORDCFG = 109;
    int NET_DVR_GET_DECODERCFG = 110;
    int NET_DVR_SET_DECODERCFG = 111;
    int NET_DVR_GET_RS232CFG = 112;
    int NET_DVR_SET_RS232CFG = 113;
    int NET_DVR_GET_ALARMINCFG = 114;
    int NET_DVR_SET_ALARMINCFG = 115;
    int NET_DVR_GET_ALARMOUTCFG = 116;
    int NET_DVR_SET_ALARMOUTCFG = 117;
    int NET_DVR_GET_TIMECFG = 118;
    int NET_DVR_SET_TIMECFG = 119;
    int NET_DVR_GET_PREVIEWCFG = 120;
    int NET_DVR_SET_PREVIEWCFG = 121;
    int NET_DVR_GET_VIDEOOUTCFG = 122;
    int NET_DVR_SET_VIDEOOUTCFG = 123;
    int NET_DVR_GET_USERCFG = 124;
    int NET_DVR_SET_USERCFG = 125;
    int NET_DVR_GET_EXCEPTIONCFG = 126;
    int NET_DVR_SET_EXCEPTIONCFG = 127;
    int NET_DVR_GET_ZONEANDDST = 128;
    int NET_DVR_SET_ZONEANDDST = 129;
    int NET_DVR_GET_SHOWSTRING = 130;
    int NET_DVR_SET_SHOWSTRING = 131;
    int NET_DVR_GET_EVENTCOMPCFG = 132;
    int NET_DVR_SET_EVENTCOMPCFG = 133;
    int NET_DVR_GET_AUXOUTCFG = 140;
    int NET_DVR_SET_AUXOUTCFG = 141;
    int NET_DVR_GET_PREVIEWCFG_AUX = 142;
    int NET_DVR_SET_PREVIEWCFG_AUX = 143;
    int NET_DVR_GET_PICCFG_EX = 200;
    int NET_DVR_SET_PICCFG_EX = 201;
    int NET_DVR_GET_USERCFG_EX = 202;
    int NET_DVR_SET_USERCFG_EX = 203;
    int NET_DVR_GET_COMPRESSCFG_EX = 204;
    int NET_DVR_SET_COMPRESSCFG_EX = 205;
    int NET_DVR_GET_NETAPPCFG = 222;
    int NET_DVR_SET_NETAPPCFG = 223;
    int NET_DVR_GET_NTPCFG = 224;
    int NET_DVR_SET_NTPCFG = 225;
    int NET_DVR_GET_DDNSCFG = 226;
    int NET_DVR_SET_DDNSCFG = 227;
    int NET_DVR_GET_EMAILCFG = 228;
    int NET_DVR_SET_EMAILCFG = 229;
    int NET_DVR_GET_NFSCFG = 230;
    int NET_DVR_SET_NFSCFG = 231;
    int NET_DVR_GET_SHOWSTRING_EX = 238;
    int NET_DVR_SET_SHOWSTRING_EX = 239;
    int NET_DVR_GET_NETCFG_OTHER = 244;
    int NET_DVR_SET_NETCFG_OTHER = 245;
    int NET_DVR_GET_EMAILPARACFG = 250;
    int NET_DVR_SET_EMAILPARACFG = 251;
    int NET_DVR_GET_DDNSCFG_EX = 274;
    int NET_DVR_SET_DDNSCFG_EX = 275;
    int NET_DVR_SET_PTZPOS = 292;
    int NET_DVR_GET_PTZPOS = 293;
    int NET_DVR_GET_PTZSCOPE = 294;
    int NET_DVR_GET_NETCFG_V30 = 1000;
    int NET_DVR_SET_NETCFG_V30 = 1001;
    int NET_DVR_GET_PICCFG_V30 = 1002;
    int NET_DVR_SET_PICCFG_V30 = 1003;
    int NET_DVR_GET_RECORDCFG_V30 = 1004;
    int NET_DVR_SET_RECORDCFG_V30 = 1005;
    int NET_DVR_GET_USERCFG_V30 = 1006;
    int NET_DVR_SET_USERCFG_V30 = 1007;
    int NET_DVR_GET_DDNSCFG_V30 = 1010;
    int NET_DVR_SET_DDNSCFG_V30 = 1011;
    int NET_DVR_GET_EMAILCFG_V30 = 1012;
    int NET_DVR_SET_EMAILCFG_V30 = 1013;
    int NET_DVR_GET_CRUISE = 1020;
    int NET_DVR_SET_CRUISE = 1021;
    int NET_DVR_GET_ALARMINCFG_V30 = 1024;
    int NET_DVR_SET_ALARMINCFG_V30 = 1025;
    int NET_DVR_GET_ALARMOUTCFG_V30 = 1026;
    int NET_DVR_SET_ALARMOUTCFG_V30 = 1027;
    int NET_DVR_GET_VIDEOOUTCFG_V30 = 1028;
    int NET_DVR_SET_VIDEOOUTCFG_V30 = 1029;
    int NET_DVR_GET_SHOWSTRING_V30 = 1030;
    int NET_DVR_SET_SHOWSTRING_V30 = 1031;
    int NET_DVR_GET_EXCEPTIONCFG_V30 = 1034;
    int NET_DVR_SET_EXCEPTIONCFG_V30 = 1035;
    int NET_DVR_GET_RS232CFG_V30 = 1036;
    int NET_DVR_SET_RS232CFG_V30 = 1037;
    int NET_DVR_GET_COMPRESSCFG_V30 = 1040;
    int NET_DVR_SET_COMPRESSCFG_V30 = 1041;
    int NET_DVR_GET_DECODERCFG_V30 = 1042;
    int NET_DVR_SET_DECODERCFG_V30 = 1043;
    int NET_DVR_GET_PREVIEWCFG_V30 = 1044;
    int NET_DVR_SET_PREVIEWCFG_V30 = 1045;
    int NET_DVR_GET_PREVIEWCFG_AUX_V30 = 1046;
    int NET_DVR_SET_PREVIEWCFG_AUX_V30 = 1047;
    int NET_DVR_GET_IPPARACFG = 1048;
    int NET_DVR_GET_IPPARACFG_V40 = 1062;
    int NET_DVR_GET_STREAM_SRC_INFO_V40 = 6024;
    int NET_DVR_SET_IPPARACFG = 1049;
    int NET_DVR_GET_IPALARMINCFG = 1050;
    int NET_DVR_SET_IPALARMINCFG = 1051;
    int NET_DVR_GET_IPALARMOUTCFG = 1052;
    int NET_DVR_SET_IPALARMOUTCFG = 1053;
    int NET_DVR_GET_HDCFG = 1054;
    int NET_DVR_SET_HDCFG = 1055;
    int NET_DVR_GET_HDGROUP_CFG = 1056;
    int NET_DVR_SET_HDGROUP_CFG = 1057;
    int NET_DVR_GET_COMPRESSCFG_AUD = 1058;
    int NET_DVR_SET_COMPRESSCFG_AUD = 1059;
    int NET_DVR_FILE_SUCCESS = 1000;
    int NET_DVR_FILE_NOFIND = 1001;
    int NET_DVR_ISFINDING = 1002;
    int NET_DVR_NOMOREFILE = 1003;
    int NET_DVR_FILE_EXCEPTION = 1004;
    int COMM_ALARM = 4352;
    int COMM_ALARM_FACE = 4358;
    int COMM_TRADEINFO = 5376;
    int COMM_ALARM_V30 = 16384;
    int COMM_ALARM_V40 = 16391;
    int COMM_ALARM_RULE = 4354;
    int COMM_ALARM_PDC = 4355;
    int COMM_UPLOAD_PLATE_RESULT = 10240;
    int COMM_ITS_PLATE_RESULT = 12368;
    int COMM_IPCCFG = 16385;
    int COMM_ITS_PARK_VEHICLE = 12374;
    int COMM_ALARM_TFS = 4371;
    int COMM_ALARM_TPS_V41 = 4372;
    int COMM_ALARM_AID_V41 = 4373;
    int COMM_UPLOAD_FACESNAP_RESULT = 4370;
    int COMM_SNAP_MATCH_ALARM = 10498;
    int COMM_ALARM_ACS = 20482;
    int COMM_ID_INFO_ALARM = 20992;
    int COMM_VCA_ALARM = 18835;
    int COMM_ISAPI_ALARM = 24585;
    int COMM_ALARM_TPS_STATISTICS = 12418;
    int EXCEPTION_EXCHANGE = 32768;
    int EXCEPTION_AUDIOEXCHANGE = 32769;
    int EXCEPTION_ALARM = 32770;
    int EXCEPTION_PREVIEW = 32771;
    int EXCEPTION_SERIAL = 32772;
    int EXCEPTION_RECONNECT = 32773;
    int EXCEPTION_ALARMRECONNECT = 32774;
    int EXCEPTION_SERIALRECONNECT = 32775;
    int EXCEPTION_PLAYBACK = 32784;
    int EXCEPTION_DISKFMT = 32785;
    int NET_DVR_SYSHEAD = 1;
    int NET_DVR_STREAMDATA = 2;
    int NET_DVR_AUDIOSTREAMDATA = 3;
    int NET_DVR_STD_VIDEODATA = 4;
    int NET_DVR_STD_AUDIODATA = 5;
    int NET_DVR_REALPLAYEXCEPTION = 111;
    int NET_DVR_REALPLAYNETCLOSE = 112;
    int NET_DVR_REALPLAY5SNODATA = 113;
    int NET_DVR_REALPLAYRECONNECT = 114;
    int NET_DVR_PLAYBACKOVER = 101;
    int NET_DVR_PLAYBACKEXCEPTION = 102;
    int NET_DVR_PLAYBACKNETCLOSE = 103;
    int NET_DVR_PLAYBACK5SNODATA = 104;
    int NET_DVR_SET_GROUP_CFG = 2113;
    int NET_DVR_SET_MULTI_CARD_CFG = 2115;
    int DVR = 1;
    int ATMDVR = 2;
    int DVS = 3;
    int DEC = 4;
    int ENC_DEC = 5;
    int DVR_HC = 6;
    int DVR_HT = 7;
    int DVR_HF = 8;
    int DVR_HS = 9;
    int DVR_HTS = 10;
    int DVR_HB = 11;
    int DVR_HCS = 12;
    int DVS_A = 13;
    int DVR_HC_S = 14;
    int DVR_HT_S = 15;
    int DVR_HF_S = 16;
    int DVR_HS_S = 17;
    int ATMDVR_S = 18;
    int LOWCOST_DVR = 19;
    int DEC_MAT = 20;
    int DVR_MOBILE = 21;
    int DVR_HD_S = 22;
    int DVR_HD_SL = 23;
    int DVR_HC_SL = 24;
    int DVR_HS_ST = 25;
    int DVS_HW = 26;
    int IPCAM = 30;
    int MEGA_IPCAM = 31;
    int IPCAM_X62MF = 32;
    int IPDOME = 40;
    int MEGA_IPDOME = 41;
    int IPMOD = 50;
    int DS71XX_H = 71;
    int DS72XX_H_S = 72;
    int DS73XX_H_S = 73;
    int DS81XX_HS_S = 81;
    int DS81XX_HL_S = 82;
    int DS81XX_HC_S = 83;
    int DS81XX_HD_S = 84;
    int DS81XX_HE_S = 85;
    int DS81XX_HF_S = 86;
    int DS81XX_AH_S = 87;
    int DS81XX_AHF_S = 88;
    int DS90XX_HF_S = 90;
    int DS91XX_HF_S = 91;
    int DS91XX_HD_S = 92;
    int MAJOR_OPERATION = 3;
    int MINOR_START_DVR = 65;
    int MINOR_STOP_DVR = 66;
    int MINOR_STOP_ABNORMAL = 67;
    int MINOR_REBOOT_DVR = 68;
    int MINOR_LOCAL_LOGIN = 80;
    int MINOR_LOCAL_LOGOUT = 81;
    int MINOR_LOCAL_CFG_PARM = 82;
    int MINOR_LOCAL_PLAYBYFILE = 83;
    int MINOR_LOCAL_PLAYBYTIME = 84;
    int MINOR_LOCAL_START_REC = 85;
    int MINOR_LOCAL_STOP_REC = 86;
    int MINOR_LOCAL_PTZCTRL = 87;
    int MINOR_LOCAL_PREVIEW = 88;
    int MINOR_LOCAL_MODIFY_TIME = 89;
    int MINOR_LOCAL_UPGRADE = 90;
    int MINOR_LOCAL_RECFILE_OUTPUT = 91;
    int MINOR_LOCAL_FORMAT_HDD = 92;
    int MINOR_LOCAL_CFGFILE_OUTPUT = 93;
    int MINOR_LOCAL_CFGFILE_INPUT = 94;
    int MINOR_LOCAL_COPYFILE = 95;
    int MINOR_LOCAL_LOCKFILE = 96;
    int MINOR_LOCAL_UNLOCKFILE = 97;
    int MINOR_LOCAL_DVR_ALARM = 98;
    int MINOR_IPC_ADD = 99;
    int MINOR_IPC_DEL = 100;
    int MINOR_IPC_SET = 101;
    int MINOR_LOCAL_START_BACKUP = 102;
    int MINOR_LOCAL_STOP_BACKUP = 103;
    int MINOR_LOCAL_COPYFILE_START_TIME = 104;
    int MINOR_LOCAL_COPYFILE_END_TIME = 105;
    int MINOR_REMOTE_LOGIN = 112;
    int MINOR_REMOTE_LOGOUT = 113;
    int MINOR_REMOTE_START_REC = 114;
    int MINOR_REMOTE_STOP_REC = 115;
    int MINOR_START_TRANS_CHAN = 116;
    int MINOR_STOP_TRANS_CHAN = 117;
    int MINOR_REMOTE_GET_PARM = 118;
    int MINOR_REMOTE_CFG_PARM = 119;
    int MINOR_REMOTE_GET_STATUS = 120;
    int MINOR_REMOTE_ARM = 121;
    int MINOR_REMOTE_DISARM = 122;
    int MINOR_REMOTE_REBOOT = 123;
    int MINOR_START_VT = 124;
    int MINOR_STOP_VT = 125;
    int MINOR_REMOTE_UPGRADE = 126;
    int MINOR_REMOTE_PLAYBYFILE = 127;
    int MINOR_REMOTE_PLAYBYTIME = 128;
    int MINOR_REMOTE_PTZCTRL = 129;
    int MINOR_REMOTE_FORMAT_HDD = 130;
    int MINOR_REMOTE_STOP = 131;
    int MINOR_REMOTE_LOCKFILE = 132;
    int MINOR_REMOTE_UNLOCKFILE = 133;
    int MINOR_REMOTE_CFGFILE_OUTPUT = 134;
    int MINOR_REMOTE_CFGFILE_INTPUT = 135;
    int MINOR_REMOTE_RECFILE_OUTPUT = 136;
    int MINOR_REMOTE_DVR_ALARM = 137;
    int MINOR_REMOTE_IPC_ADD = 138;
    int MINOR_REMOTE_IPC_DEL = 139;
    int MINOR_REMOTE_IPC_SET = 140;
    int MINOR_REBOOT_VCA_LIB = 141;
    int MAJOR_INFORMATION = 4;
    int MINOR_HDD_INFO = 161;
    int MINOR_SMART_INFO = 162;
    int MINOR_REC_START = 163;
    int MINOR_REC_STOP = 164;
    int MINOR_REC_OVERDUE = 165;
    int MINOR_LINK_START = 166;
    int MINOR_LINK_STOP = 167;
    int PARA_VIDEOOUT = 1;
    int PARA_IMAGE = 2;
    int PARA_ENCODE = 4;
    int PARA_NETWORK = 8;
    int PARA_ALARM = 16;
    int PARA_EXCEPTION = 32;
    int PARA_DECODER = 64;
    int PARA_RS232 = 128;
    int PARA_PREVIEW = 256;
    int PARA_SECURITY = 512;
    int PARA_DATETIME = 1024;
    int PARA_FRAMETYPE = 2048;
    int PARA_VCA_RULE = 4096;
    int DS6001_HF_B = 60;
    int DS6001_HF_P = 61;
    int DS6002_HF_B = 62;
    int DS6101_HF_B = 63;
    int IVMS_2000 = 64;
    int DS9000_IVS = 65;
    int DS8004_AHL_A = 66;
    int DS6101_HF_P = 67;
    int VCA_DEV_ABILITY = 256;
    int VCA_CHAN_ABILITY = 272;
    int NET_DVR_SET_PLATECFG = 150;
    int NET_DVR_GET_PLATECFG = 151;
    int NET_DVR_SET_RULECFG = 152;
    int NET_DVR_GET_RULECFG = 153;
    int NET_DVR_SET_LF_CFG = 160;
    int NET_DVR_GET_LF_CFG = 161;
    int NET_DVR_SET_IVMS_STREAMCFG = 162;
    int NET_DVR_GET_IVMS_STREAMCFG = 163;
    int NET_DVR_SET_VCA_CTRLCFG = 164;
    int NET_DVR_GET_VCA_CTRLCFG = 165;
    int NET_DVR_SET_VCA_MASK_REGION = 166;
    int NET_DVR_GET_VCA_MASK_REGION = 167;
    int NET_DVR_SET_VCA_ENTER_REGION = 168;
    int NET_DVR_GET_VCA_ENTER_REGION = 169;
    int NET_DVR_SET_VCA_LINE_SEGMENT = 170;
    int NET_DVR_GET_VCA_LINE_SEGMENT = 171;
    int NET_DVR_SET_IVMS_MASK_REGION = 172;
    int NET_DVR_GET_IVMS_MASK_REGION = 173;
    int NET_DVR_SET_IVMS_ENTER_REGION = 174;
    int NET_DVR_GET_IVMS_ENTER_REGION = 175;
    int NET_DVR_SET_IVMS_BEHAVIORCFG = 176;
    int NET_DVR_GET_IVMS_BEHAVIORCFG = 177;
    int NET_DVR_GET_TRAVERSE_PLANE_DETECTION = 3360;
    int NET_DVR_GET_CARD_CFG = 2116;
    int NET_DVR_SET_CARD_CFG = 2117;
    int NET_DVR_DEV_ADDRESS_MAX_LEN = 129;
    int NET_DVR_LOGIN_USERNAME_MAX_LEN = 64;
    int NET_DVR_LOGIN_PASSWD_MAX_LEN = 64;
    int MAX_ALERTLINE_NUM = 8;
    int MAX_PARKNO_LEN = 16;
    int MAX_ID_LEN = 48;
    int MAX_INTERVAL_NUM = 4;
    int ILLEGAL_LEN = 32;
    int MONITORSITE_ID_LEN = 48;
    int DEVICE_ID_LEN = 48;
    int MAX_HUMAN_BIRTHDATE_LEN = 10;
    int MAX_TPS_RULE = 8;
    int MAX_FILE_PATH_LEN = 256;
    int MAX_FACE_NUM = 2;
    int ACS_CARD_NO_LEN = 32;
    int MAX_GROUP_NUM_128 = 128;
    int MAX_DOOR_NUM_256 = 256;
    int CARD_PASSWORD_LEN = 8;
    int MAX_CARD_READER_NUM = 64;
    int MAX_DOOR_CODE_LEN = 8;
    int MAX_LOCK_CODE_LEN = 8;
    int MAX_CARD_RIGHT_PLAN_NUM = 4;
    int NET_DVR_SET_CARD_CFG_V50 = 2179;
    int NET_DVR_GET_FACE_PARAM_CFG = 2507;
    int NET_DVR_SET_FACE_PARAM_CFG = 2508;
    int NET_DVR_DEL_FACE_PARAM_CFG = 2509;
    int MAX_CARD_READER_NUM_512 = 512;
    int ERROR_MSG_LEN = 32;
    int NET_DVR_GET_CARD_CFG_V50 = 2178;
    int NET_DVR_GET_STREAM_INFO = 6023;
    int DEVICE_ABILITY_INFO = 17;
    int NET_DVR_GET_WORK_STATUS = 6189;

    boolean NET_DVR_Init();

    boolean NET_DVR_Cleanup();

    boolean NET_DVR_SetSDKLocalCfg(int var1, Pointer var2);

    boolean NET_DVR_GetSDKLocalCfg(int var1, Pointer var2);

    boolean NET_DVR_SetDVRMessage(int var1, int var2);

    boolean NET_DVR_SetExceptionCallBack_V30(int var1, int var2, FExceptionCallBack var3, Pointer var4);

    boolean NET_DVR_SetDVRMessCallBack(FMessCallBack var1);

    boolean NET_DVR_SetDVRMessCallBack_EX(FMessCallBack_EX var1);

    boolean NET_DVR_SetDVRMessCallBack_NEW(FMessCallBack_NEW var1);

    boolean NET_DVR_SetDVRMessageCallBack(FMessageCallBack var1, int var2);

    boolean NET_DVR_SetDVRMessageCallBack_V30(FMSGCallBack var1, Pointer var2);

    boolean NET_DVR_SetDVRMessageCallBack_V31(FMSGCallBack_V31 var1, Pointer var2);

    boolean NET_DVR_SetConnectTime(int var1, int var2);

    boolean NET_DVR_SetReconnect(int var1, boolean var2);

    int NET_DVR_GetSDKVersion();

    int NET_DVR_GetSDKBuildVersion();

    int NET_DVR_IsSupport();

    boolean NET_DVR_StartListen(String var1, short var2);

    boolean NET_DVR_StopListen();

    int NET_DVR_StartListen_V30(String var1, short var2, FMSGCallBack var3, Pointer var4);

    boolean NET_DVR_StopListen_V30(int var1);

    int NET_DVR_Login(String var1, short var2, String var3, String var4, NET_DVR_DEVICEINFO var5);

    int NET_DVR_Login_V30(String var1, short var2, String var3, String var4, NET_DVR_DEVICEINFO_V30 var5);

    int NET_DVR_Login_V40(NET_DVR_USER_LOGIN_INFO var1, NET_DVR_DEVICEINFO_V40 var2);

    boolean NET_DVR_Logout(int var1);

    boolean NET_DVR_Logout_V30(int var1);

    int NET_DVR_GetLastError();

    String NET_DVR_GetErrorMsg(IntByReference var1);

    boolean NET_DVR_SetShowMode(int var1, int var2);

    boolean NET_DVR_GetDVRIPByResolveSvr(String var1, short var2, String var3, short var4, String var5, short var6, String var7);

    boolean NET_DVR_GetDVRIPByResolveSvr_EX(String var1, short var2, String var3, short var4, String var5, short var6, String var7, IntByReference var8);

    int NET_DVR_RealPlay(int var1, NET_DVR_CLIENTINFO var2);

    int NET_DVR_RealPlay_V30(int var1, NET_DVR_CLIENTINFO var2, FRealDataCallBack_V30 var3, Pointer var4, boolean var5);

    boolean NET_DVR_StopRealPlay(int var1);

    boolean NET_DVR_RigisterDrawFun(int var1, FDrawFun var2, int var3);

    boolean NET_DVR_SetPlayerBufNumber(int var1, int var2);

    boolean NET_DVR_ThrowBFrame(int var1, int var2);

    boolean NET_DVR_SetAudioMode(int var1);

    boolean NET_DVR_OpenSound(int var1);

    boolean NET_DVR_CloseSound();

    boolean NET_DVR_OpenSoundShare(int var1);

    boolean NET_DVR_CloseSoundShare(int var1);

    boolean NET_DVR_Volume(int var1, short var2);

    boolean NET_DVR_SaveRealData(int var1, String var2);

    boolean NET_DVR_StopSaveRealData(int var1);

    boolean NET_DVR_SetRealDataCallBack(int var1, FRowDataCallBack var2, int var3);

    boolean NET_DVR_SetStandardDataCallBack(int var1, FStdDataCallBack var2, int var3);

    boolean NET_DVR_CapturePicture(int var1, String var2);

    boolean NET_DVR_MakeKeyFrame(int var1, int var2);

    boolean NET_DVR_MakeKeyFrameSub(int var1, int var2);

    boolean NET_DVR_PTZControl(int var1, int var2, int var3);

    boolean NET_DVR_PTZControl_Other(int var1, int var2, int var3, int var4);

    boolean NET_DVR_TransPTZ(int var1, String var2, int var3);

    boolean NET_DVR_TransPTZ_Other(int var1, int var2, String var3, int var4);

    boolean NET_DVR_PTZPreset(int var1, int var2, int var3);

    boolean NET_DVR_PTZPreset_Other(int var1, int var2, int var3, int var4);

    boolean NET_DVR_TransPTZ_EX(int var1, String var2, int var3);

    boolean NET_DVR_PTZControl_EX(int var1, int var2, int var3);

    boolean NET_DVR_PTZPreset_EX(int var1, int var2, int var3);

    boolean NET_DVR_PTZCruise(int var1, int var2, byte var3, byte var4, short var5);

    boolean NET_DVR_PTZCruise_Other(int var1, int var2, int var3, byte var4, byte var5, short var6);

    boolean NET_DVR_PTZCruise_EX(int var1, int var2, byte var3, byte var4, short var5);

    boolean NET_DVR_PTZTrack(int var1, int var2);

    boolean NET_DVR_PTZTrack_Other(int var1, int var2, int var3);

    boolean NET_DVR_PTZTrack_EX(int var1, int var2);

    boolean NET_DVR_PTZControlWithSpeed(int var1, int var2, int var3, int var4);

    boolean NET_DVR_PTZControlWithSpeed_Other(int var1, int var2, int var3, int var4, int var5);

    boolean NET_DVR_PTZControlWithSpeed_EX(int var1, int var2, int var3, int var4);

    boolean NET_DVR_GetPTZCruise(int var1, int var2, int var3, NET_DVR_CRUISE_RET var4);

    boolean NET_DVR_PTZMltTrack(int var1, int var2, int var3);

    boolean NET_DVR_PTZMltTrack_Other(int var1, int var2, int var3, int var4);

    boolean NET_DVR_PTZMltTrack_EX(int var1, int var2, int var3);

    int NET_DVR_FindFile(int var1, int var2, int var3, NET_DVR_TIME var4, NET_DVR_TIME var5);

    int NET_DVR_FindNextFile(int var1, NET_DVR_FIND_DATA var2);

    boolean NET_DVR_FindClose(int var1);

    int NET_DVR_FindNextFile_V30(int var1, NET_DVR_FINDDATA_V30 var2);

    int NET_DVR_FindFile_V30(int var1, NET_DVR_FILECOND var2);

    boolean NET_DVR_FindClose_V30(int var1);

    int NET_DVR_FindNextFile_Card(int var1, NET_DVR_FINDDATA_CARD var2);

    int NET_DVR_FindFile_Card(int var1, int var2, int var3, NET_DVR_TIME var4, NET_DVR_TIME var5);

    boolean NET_DVR_LockFileByName(int var1, String var2);

    boolean NET_DVR_UnlockFileByName(int var1, String var2);

    int NET_DVR_PlayBackByName(int var1, String var2, HWND var3);

    int NET_DVR_PlayBackByTime(int var1, int var2, NET_DVR_TIME var3, NET_DVR_TIME var4, HWND var5);

    boolean NET_DVR_PlayBackControl(int var1, int var2, int var3, IntByReference var4);

    boolean NET_DVR_PlayBackControl_V40(int lPlayHandle, int dwControlCode, Pointer var1, int var2, Pointer var3, int var4);

    boolean NET_DVR_StopPlayBack(int var1);

    boolean NET_DVR_SetPlayDataCallBack(int var1, FPlayDataCallBack var2, int var3);

    boolean NET_DVR_PlayBackSaveData(int var1, String var2);

    boolean NET_DVR_StopPlayBackSave(int var1);

    boolean NET_DVR_GetPlayBackOsdTime(int var1, NET_DVR_TIME var2);

    boolean NET_DVR_PlayBackCaptureFile(int var1, String var2);

    int NET_DVR_GetFileByName(int var1, String var2, String var3);

    int NET_DVR_GetFileByTime(int var1, int var2, NET_DVR_TIME var3, NET_DVR_TIME var4, String var5);

    int NET_DVR_GetFileByTime_V40(int lUserId, String filePath, NET_DVR_PLAYCOND pDownloadCond);

    boolean NET_DVR_StopGetFile(int var1);

    int NET_DVR_GetDownloadPos(int var1);

    int NET_DVR_GetPlayBackPos(int var1);

    int NET_DVR_Upgrade(int var1, String var2);

    int NET_DVR_GetUpgradeState(int var1);

    int NET_DVR_GetUpgradeProgress(int var1);

    boolean NET_DVR_CloseUpgradeHandle(int var1);

    boolean NET_DVR_SetNetworkEnvironment(int var1);

    int NET_DVR_FormatDisk(int var1, int var2);

    boolean NET_DVR_GetFormatProgress(int var1, IntByReference var2, IntByReference var3, IntByReference var4);

    boolean NET_DVR_CloseFormatHandle(int var1);

    int NET_DVR_SetupAlarmChan(int var1);

    boolean NET_DVR_CloseAlarmChan(int var1);

    int NET_DVR_SetupAlarmChan_V30(int var1);

    int NET_DVR_SetupAlarmChan_V41(int var1, NET_DVR_SETUPALARM_PARAM var2);

    boolean NET_DVR_CloseAlarmChan_V30(int var1);

    int NET_DVR_StartVoiceCom(int var1, FVoiceDataCallBack var2, int var3);

    int NET_DVR_StartVoiceCom_V30(int var1, int var2, boolean var3, FVoiceDataCallBack_V30 var4, Pointer var5);

    boolean NET_DVR_SetVoiceComClientVolume(int var1, short var2);

    boolean NET_DVR_StopVoiceCom(int var1);

    int NET_DVR_StartVoiceCom_MR(int var1, FVoiceDataCallBack_MR var2, int var3);

    int NET_DVR_StartVoiceCom_MR_V30(int var1, int var2, FVoiceDataCallBack_MR_V30 var3, Pointer var4);

    boolean NET_DVR_VoiceComSendData(int var1, String var2, int var3);

    boolean NET_DVR_ClientAudioStart();

    boolean NET_DVR_ClientAudioStart_V30(FVoiceDataCallBack2 var1, Pointer var2);

    boolean NET_DVR_ClientAudioStop();

    boolean NET_DVR_AddDVR(int var1);

    int NET_DVR_AddDVR_V30(int var1, int var2);

    boolean NET_DVR_DelDVR(int var1);

    boolean NET_DVR_DelDVR_V30(int var1);

    int NET_DVR_SerialStart(int var1, int var2, FSerialDataCallBack var3, int var4);

    boolean NET_DVR_SerialSend(int var1, int var2, String var3, int var4);

    boolean NET_DVR_SerialStop(int var1);

    boolean NET_DVR_SendTo232Port(int var1, String var2, int var3);

    boolean NET_DVR_SendToSerialPort(int var1, int var2, int var3, String var4, int var5);

    Pointer NET_DVR_InitG722Decoder(int var1);

    void NET_DVR_ReleaseG722Decoder(Pointer var1);

    boolean NET_DVR_DecodeG722Frame(Pointer var1, String var2, String var3);

    Pointer NET_DVR_InitG722Encoder();

    boolean NET_DVR_EncodeG722Frame(Pointer var1, String var2, String var3);

    void NET_DVR_ReleaseG722Encoder(Pointer var1);

    boolean NET_DVR_ClickKey(int var1, int var2);

    boolean NET_DVR_StartDVRRecord(int var1, int var2, int var3);

    boolean NET_DVR_StopDVRRecord(int var1, int var2);

    boolean NET_DVR_InitDevice_Card(IntByReference var1);

    boolean NET_DVR_ReleaseDevice_Card();

    boolean NET_DVR_InitDDraw_Card(int var1, int var2);

    boolean NET_DVR_ReleaseDDraw_Card();

    int NET_DVR_RealPlay_Card(int var1, NET_DVR_CARDINFO var2, int var3);

    boolean NET_DVR_ResetPara_Card(int var1, NET_DVR_DISPLAY_PARA var2);

    boolean NET_DVR_RefreshSurface_Card();

    boolean NET_DVR_ClearSurface_Card();

    boolean NET_DVR_RestoreSurface_Card();

    boolean NET_DVR_OpenSound_Card(int var1);

    boolean NET_DVR_CloseSound_Card(int var1);

    boolean NET_DVR_SetVolume_Card(int var1, short var2);

    boolean NET_DVR_AudioPreview_Card(int var1, boolean var2);

    int NET_DVR_GetCardLastError_Card();

    boolean NET_DVR_GetDeviceAbility(int lUserID, int dwAbilityType, Pointer pInBuf, int dwInLength, Pointer pOutBuf, int dwOutLength);

    Pointer NET_DVR_GetChanHandle_Card(int var1);

    boolean NET_DVR_CapturePicture_Card(int var1, String var2);

    boolean NET_DVR_GetSerialNum_Card(int var1, IntByReference var2);

    int NET_DVR_FindDVRLog(int var1, int var2, int var3, int var4, NET_DVR_TIME var5, NET_DVR_TIME var6);

    int NET_DVR_FindNextLog(int var1, NET_DVR_LOG var2);

    boolean NET_DVR_FindLogClose(int var1);

    int NET_DVR_FindDVRLog_V30(int var1, int var2, int var3, int var4, NET_DVR_TIME var5, NET_DVR_TIME var6, boolean var7);

    int NET_DVR_FindNextLog_V30(int var1, NET_DVR_LOG_V30 var2);

    boolean NET_DVR_FindLogClose_V30(int var1);

    int NET_DVR_FindFileByCard(int var1, int var2, int var3, int var4, String var5, NET_DVR_TIME var6, NET_DVR_TIME var7);

    boolean NET_DVR_CaptureJPEGPicture(int var1, int var2, NET_DVR_JPEGPARA var3, String var4);

    boolean NET_DVR_CaptureJPEGPicture_NEW(int var1, NativeLong var2, NET_DVR_JPEGPARA var3, ByteBuffer var4, int var5, IntByReference var6);

    int NET_DVR_GetRealPlayerIndex(int var1);

    int NET_DVR_GetPlayBackPlayerIndex(int var1);

    boolean NET_DVR_SetScaleCFG(int var1, int var2);

    boolean NET_DVR_GetScaleCFG(int var1, IntByReference var2);

    boolean NET_DVR_SetScaleCFG_V30(int var1, NET_DVR_SCALECFG var2);

    boolean NET_DVR_GetScaleCFG_V30(int var1, NET_DVR_SCALECFG var2);

    boolean NET_DVR_SetATMPortCFG(int var1, short var2);

    boolean NET_DVR_GetATMPortCFG(int var1, ShortByReference var2);

    boolean NET_DVR_InitDDrawDevice();

    boolean NET_DVR_ReleaseDDrawDevice();

    int NET_DVR_GetDDrawDeviceTotalNums();

    boolean NET_DVR_SetDDrawDevice(int var1, int var2);

    boolean NET_DVR_PTZSelZoomIn(int var1, NET_DVR_POINT_FRAME var2);

    boolean NET_DVR_PTZSelZoomIn_EX(int var1, int var2, NET_DVR_POINT_FRAME var3);

    boolean NET_DVR_StartDecode(int var1, int var2, NET_DVR_DECODERINFO var3);

    boolean NET_DVR_StopDecode(int var1, int var2);

    boolean NET_DVR_GetDecoderState(int var1, int var2, NET_DVR_DECODERSTATE var3);

    boolean NET_DVR_SetDecInfo(int var1, int var2, NET_DVR_DECCFG var3);

    boolean NET_DVR_GetDecInfo(int var1, int var2, NET_DVR_DECCFG var3);

    boolean NET_DVR_SetDecTransPort(int var1, NET_DVR_PORTCFG var2);

    boolean NET_DVR_GetDecTransPort(int var1, NET_DVR_PORTCFG var2);

    boolean NET_DVR_DecPlayBackCtrl(int var1, int var2, int var3, int var4, IntByReference var5, NET_DVR_PLAYREMOTEFILE var6);

    boolean NET_DVR_StartDecSpecialCon(int var1, int var2, NET_DVR_DECCHANINFO var3);

    boolean NET_DVR_StopDecSpecialCon(int var1, int var2, NET_DVR_DECCHANINFO var3);

    boolean NET_DVR_DecCtrlDec(int var1, int var2, int var3);

    boolean NET_DVR_DecCtrlScreen(int var1, int var2, int var3);

    boolean NET_DVR_GetDecCurLinkStatus(int var1, int var2, NET_DVR_DECSTATUS var3);

    boolean NET_DVR_MatrixStartDynamic(int var1, int var2, NET_DVR_MATRIX_DYNAMIC_DEC var3);

    boolean NET_DVR_MatrixStopDynamic(int var1, int var2);

    boolean NET_DVR_MatrixGetDecChanInfo(int var1, int var2, NET_DVR_MATRIX_DEC_CHAN_INFO var3);

    boolean NET_DVR_MatrixSetLoopDecChanInfo(int var1, int var2, NET_DVR_MATRIX_LOOP_DECINFO var3);

    boolean NET_DVR_MatrixGetLoopDecChanInfo(int var1, int var2, NET_DVR_MATRIX_LOOP_DECINFO var3);

    boolean NET_DVR_MatrixSetLoopDecChanEnable(int var1, int var2, int var3);

    boolean NET_DVR_MatrixGetLoopDecChanEnable(int var1, int var2, IntByReference var3);

    boolean NET_DVR_MatrixGetLoopDecEnable(int var1, IntByReference var2);

    boolean NET_DVR_MatrixSetDecChanEnable(int var1, int var2, int var3);

    boolean NET_DVR_MatrixGetDecChanEnable(int var1, int var2, IntByReference var3);

    boolean NET_DVR_MatrixGetDecChanStatus(int var1, int var2, NET_DVR_MATRIX_DEC_CHAN_STATUS var3);

    boolean NET_DVR_MatrixSetTranInfo(int var1, NET_DVR_MATRIX_TRAN_CHAN_CONFIG var2);

    boolean NET_DVR_MatrixGetTranInfo(int var1, NET_DVR_MATRIX_TRAN_CHAN_CONFIG var2);

    boolean NET_DVR_MatrixSetRemotePlay(int var1, int var2, NET_DVR_MATRIX_DEC_REMOTE_PLAY var3);

    boolean NET_DVR_MatrixSetRemotePlayControl(int var1, int var2, int var3, int var4, IntByReference var5);

    boolean NET_DVR_MatrixGetRemotePlayStatus(int var1, int var2, NET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS var3);

    boolean NET_DVR_RefreshPlay(int var1);

    boolean NET_DVR_RestoreConfig(int var1);

    boolean NET_DVR_SaveConfig(int var1);

    boolean NET_DVR_RebootDVR(int var1);

    boolean NET_DVR_ShutDownDVR(int var1);

    boolean NET_DVR_GetDeviceConfig(int var1, int var2, int var3, Pointer var4, int var5, Pointer var6, Pointer var7, int var8);

    boolean NET_DVR_GetDVRConfig(int var1, int var2, int var3, Pointer var4, int var5, IntByReference var6);

    boolean NET_DVR_SetDVRConfig(int var1, int var2, int var3, Pointer var4, int var5);

    boolean NET_DVR_GetDVRWorkState_V30(int var1, NET_DVR_WORKSTATE_V30 var2);

    boolean NET_DVR_GetDVRWorkState(int var1, NET_DVR_WORKSTATE var2);

    boolean NET_DVR_SetVideoEffect(int var1, int var2, int var3, int var4, int var5, int var6);

    boolean NET_DVR_GetVideoEffect(int var1, int var2, IntByReference var3, IntByReference var4, IntByReference var5, IntByReference var6);

    boolean NET_DVR_ClientGetframeformat(int var1, NET_DVR_FRAMEFORMAT var2);

    boolean NET_DVR_ClientSetframeformat(int var1, NET_DVR_FRAMEFORMAT var2);

    boolean NET_DVR_ClientGetframeformat_V30(int var1, NET_DVR_FRAMEFORMAT_V30 var2);

    boolean NET_DVR_ClientSetframeformat_V30(int var1, NET_DVR_FRAMEFORMAT_V30 var2);

    boolean NET_DVR_GetAlarmOut_V30(int var1, NET_DVR_ALARMOUTSTATUS_V30 var2);

    boolean NET_DVR_GetAlarmOut(int var1, NET_DVR_ALARMOUTSTATUS var2);

    boolean NET_DVR_SetAlarmOut(int var1, int var2, int var3);

    boolean NET_DVR_ClientSetVideoEffect(int var1, int var2, int var3, int var4, int var5);

    boolean NET_DVR_ClientGetVideoEffect(int var1, IntByReference var2, IntByReference var3, IntByReference var4, IntByReference var5);

    boolean NET_DVR_GetConfigFile(int var1, String var2);

    boolean NET_DVR_SetConfigFile(int var1, String var2);

    boolean NET_DVR_GetConfigFile_V30(int var1, String var2, int var3, IntByReference var4);

    boolean NET_DVR_GetConfigFile_EX(int var1, String var2, int var3);

    boolean NET_DVR_SetConfigFile_EX(int var1, String var2, int var3);

    boolean NET_DVR_SetLogToFile(int var1, String var2, boolean var3);

    boolean NET_DVR_GetSDKState(NET_DVR_SDKSTATE var1);

    boolean NET_DVR_GetSDKAbility(NET_DVR_SDKABL var1);

    boolean NET_DVR_GetPTZProtocol(int var1, NET_DVR_PTZCFG var2);

    boolean NET_DVR_LockPanel(int var1);

    boolean NET_DVR_UnLockPanel(int var1);

    boolean NET_DVR_SetRtspConfig(int var1, int var2, NET_DVR_RTSPCFG var3, int var4);

    boolean NET_DVR_GetRtspConfig(int var1, int var2, NET_DVR_RTSPCFG var3, int var4);

    boolean NET_DVR_ContinuousShoot(int var1, NET_DVR_SNAPCFG var2);

    int NET_DVR_StartRemoteConfig(int var1, int var2, Pointer var3, int var4, FRemoteConfigCallback var5, Pointer var6);

    boolean NET_DVR_SendRemoteConfig(int var1, int var2, Pointer var3, int var4);

    boolean NET_DVR_ControlGateway(int lUserID, int lGatewayIndex, int dwStaic);

    int NET_DVR_GetNextRemoteConfig(int var1, Pointer var2, int var3);

    boolean NET_DVR_StopRemoteConfig(int var1);

    boolean NET_DVR_STDXMLConfig(int var1, NET_DVR_XML_CONFIG_INPUT var2, NET_DVR_XML_CONFIG_OUTPUT var3);

    boolean NET_DVR_RemoteControl(int var1, int var2, Pointer var3, int var4);

    int NET_DVR_GetVehicleGpsInfo(int var1, NET_DVR_GET_GPS_DATA_PARAM var2, fGPSDataCallback var3, Pointer var4);

    class SdkStructure extends Structure {
        @Override
        protected List<String> getFieldOrder() {
            List<String> fieldOrderList = new ArrayList<String>();
            for (Class<?> cls = getClass();
                 !cls.equals(HCNetSDK.SdkStructure.class);
                 cls = cls.getSuperclass()) {
                Field[] fields = cls.getDeclaredFields();
                int modifiers;
                for (Field field : fields) {
                    modifiers = field.getModifiers();
                    if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
                        continue;
                    }
                    fieldOrderList.add(field.getName());
                }
            }
            //            System.out.println(fieldOrderList);

            return fieldOrderList;
        }
    }

    class BYTE_ARRAY extends SdkStructure {
        public byte[] byValue;

        public BYTE_ARRAY(int iLen) {
            this.byValue = new byte[iLen];
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("byValue");
        }
    }

    enum CAPTURE_MODE {
        BMP_MODE,
        JPEG_MODE;

        CAPTURE_MODE() {
        }
    }

    class CARDRIGHTPLAN extends SdkStructure {
        public byte[] byRightPlan = new byte[4];

        public CARDRIGHTPLAN() {
        }
    }

    class CARDRIGHTPLAN_WORD extends SdkStructure {
        public short[] wRightPlan = new short[4];

        public CARDRIGHTPLAN_WORD() {
        }
    }

    enum DISPLAY_MODE {
        NORMALMODE,
        OVERLAYMODE;

        DISPLAY_MODE() {
        }
    }

    interface FColGlobalDataCallBack extends StdCallCallback {
        void invoke(int var1, String var2, int var3, String var4, int var5, int var6);
    }

    interface FColLocalDataCallBack extends StdCallCallback {
        void invoke(int var1, String var2, int var3, String var4, int var5, int var6);
    }

    interface FDrawFun extends StdCallCallback {
        void invoke(int var1, HDC var2, int var3);
    }

    interface FExceptionCallBack extends StdCallCallback {
        void invoke(int var1, int var2, int var3, Pointer var4);
    }

    interface FJpegdataCallBack extends StdCallCallback {
        int invoke(int var1, int var2, String var3, String var4, String var5, int var6, int var7);
    }

    interface FLoginResultCallBack extends StdCallCallback {
        int invoke(int var1, int var2, NET_DVR_DEVICEINFO_V30 var3, Pointer var4);
    }

    interface FMSGCallBack extends StdCallCallback {
        void invoke(int var1, NET_DVR_ALARMER var2, Pointer var3, int var4, Pointer var5);
    }

    interface FMSGCallBack_V31 extends StdCallCallback {
        boolean invoke(int var1, NET_DVR_ALARMER var2, Pointer var3, int var4, Pointer var5);
    }

    interface FMessCallBack extends StdCallCallback {
        boolean invoke(int var1, String var2, String var3, int var4);
    }

    interface FMessCallBack_EX extends StdCallCallback {
        boolean invoke(int var1, int var2, String var3, int var4);
    }

    interface FMessCallBack_NEW extends StdCallCallback {
        boolean invoke(int var1, String var2, String var3, int var4, short var5);
    }

    interface FMessageCallBack extends StdCallCallback {
        boolean invoke(int var1, String var2, String var3, int var4, int var5);
    }

    interface FPlayDataCallBack extends StdCallCallback {
        void invoke(int var1, int var2, ByteByReference var3, int var4, int var5);
    }

    interface FPostMessageCallBack extends StdCallCallback {
        int invoke(int var1, int var2);
    }

    interface FRealDataCallBack_V30 extends StdCallCallback {
        void invoke(int var1, int var2, ByteByReference var3, int var4, Pointer var5);
    }

    interface FRemoteConfigCallback extends StdCallCallback {
        void invoke(int var1, Pointer var2, int var3, Pointer var4);
    }

    interface FRowDataCallBack extends StdCallCallback {
        void invoke(int var1, String var2, int var3, String var4, int var5, int var6);
    }

    interface FSerialDataCallBack extends StdCallCallback {
        void invoke(int var1, String var2, int var3, int var4);
    }

    interface FStdDataCallBack extends StdCallCallback {
        void invoke(int var1, int var2, ByteByReference var3, int var4, int var5);
    }

    interface FVoiceDataCallBack extends StdCallCallback {
        void invoke(int var1, String var2, int var3, byte var4, int var5);
    }

    interface FVoiceDataCallBack2 extends StdCallCallback {
        void invoke(String var1, int var2, Pointer var3);
    }

    interface FVoiceDataCallBack_MR extends StdCallCallback {
        void invoke(int var1, String var2, int var3, byte var4, int var5);
    }

    interface FVoiceDataCallBack_MR_V30 extends StdCallCallback {
        void invoke(int var1, String var2, int var3, byte var4, String var5);
    }

    interface FVoiceDataCallBack_V30 extends StdCallCallback {
        void invoke(int var1, String var2, int var3, byte var4, Pointer var5);
    }

    class GpsDataParamUion extends Union {
        public TimeSegParam timeSeg = new TimeSegParam();
        public TimePointParam timePoint = new TimePointParam();

        public GpsDataParamUion() {
        }
    }

    class MY_USER_DATA extends SdkStructure {
        public int dwSize;
        public byte[] byteData = new byte[128];

        public MY_USER_DATA() {
        }
    }

    class NET_DVRRECEIVER extends SdkStructure {
        public byte[] sName = new byte[32];
        public byte[] sAddress = new byte[48];

        public NET_DVRRECEIVER() {
        }
    }

    class NET_DVR_ACS_ALARM_INFO extends SdkStructure {
        public int dwSize;
        public int dwMajor;
        public int dwMinor;
        public NET_DVR_TIME struTime = new NET_DVR_TIME();
        public byte[] sNetUser = new byte[16];
        public NET_DVR_IPADDR struRemoteHostAddr = new NET_DVR_IPADDR();
        public NET_DVR_ACS_EVENT_INFO struAcsEventInfo = new NET_DVR_ACS_EVENT_INFO();
        public int dwPicDataLen;
        public Pointer pPicData;
        public short wInductiveEventType;
        public byte byPicTransType;
        public byte byRes1;
        public int dwIOTChannelNo;
        public Pointer pAcsEventInfoExtend;
        public byte byAcsEventInfoExtend;
        public byte byTimeType;
        public byte[] byRes = new byte[10];

        public NET_DVR_ACS_ALARM_INFO() {
        }
    }

    class NET_DVR_ACS_EVENT_INFO extends SdkStructure {
        public int dwSize;
        public byte[] byCardNo = new byte[32];
        public byte byCardType;
        public byte byWhiteListNo;
        public byte byReportChannel;
        public byte byCardReaderKind;
        public int dwCardReaderNo;
        public int dwDoorNo;
        public int dwVerifyNo;
        public int dwAlarmInNo;
        public int dwAlarmOutNo;
        public int dwCaseSensorNo;
        public int dwRs485No;
        public int dwMultiCardGroupNo;
        public short wAccessChannel;
        public byte byDeviceNo;
        public byte byDistractControlNo;
        public int dwEmployeeNo;
        public short wLocalControllerID;
        public byte byInternetAccess;
        public byte byType;
        public byte[] byRes = new byte[20];

        public NET_DVR_ACS_EVENT_INFO() {
        }
    }

    class NET_DVR_ADDIT_POSITION extends SdkStructure {
        public byte[] sDevName = new byte[32];
        public int dwSpeed;
        public int dwLongitude;
        public int dwLatitude;
        public byte[] direction = new byte[2];
        public byte[] res = new byte[2];

        public NET_DVR_ADDIT_POSITION() {
        }
    }

    class NET_DVR_AID_ALARM_V41 extends SdkStructure {
        public int dwSize;
        public int dwRelativeTime;
        public int dwAbsTime;
        public NET_VCA_DEV_INFO struDevInfo = new NET_VCA_DEV_INFO();
        public NET_DVR_AID_INFO struAIDInfo = new NET_DVR_AID_INFO();
        public NET_DVR_SCENE_INFO struSceneInfo = new NET_DVR_SCENE_INFO();
        public int dwPicDataLen;
        public Pointer pImage;
        public byte byDataType;
        public byte byLaneNo;
        public short wMilliSecond;
        public byte[] byMonitoringSiteID = new byte[48];
        public byte[] byDeviceID = new byte[48];
        public int dwXmlLen;
        public Pointer pXmlBuf;
        public byte[] byRes = new byte[20];

        public NET_DVR_AID_ALARM_V41() {
        }
    }

    class NET_DVR_AID_INFO extends SdkStructure {
        public byte byRuleID;
        public byte[] byRes1 = new byte[3];
        public byte[] byRuleName = new byte[32];
        public int dwAIDType;
        public NET_DVR_DIRECTION struDirect = new NET_DVR_DIRECTION();
        public byte bySpeedLimit;
        public byte byCurrentSpeed;
        public byte byVehicleEnterState;
        public byte byState;
        public byte[] byParkingID = new byte[16];
        public byte[] byRes2 = new byte[20];

        public NET_DVR_AID_INFO() {
        }
    }

    class NET_DVR_ALARMER extends SdkStructure {
        public byte byUserIDValid;
        public byte bySerialValid;
        public byte byVersionValid;
        public byte byDeviceNameValid;
        public byte byMacAddrValid;
        public byte byLinkPortValid;
        public byte byDeviceIPValid;
        public byte bySocketIPValid;
        public int lUserID;
        public byte[] sSerialNumber = new byte[48];
        public int dwDeviceVersion;
        public byte[] sDeviceName = new byte[32];
        public byte[] byMacAddr = new byte[6];
        public short wLinkPort;
        public byte[] sDeviceIP = new byte[128];
        public byte[] sSocketIP = new byte[128];
        public byte byIpProtocol;
        public byte[] byRes2 = new byte[11];

        public NET_DVR_ALARMER() {
        }
    }

    class NET_DVR_ALARMINCFG extends SdkStructure {
        public int dwSize;
        public byte[] sAlarmInName = new byte[32];
        public byte byAlarmType;
        public byte byAlarmInHandle;
        public NET_DVR_HANDLEEXCEPTION struAlarmHandleType;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmTime = new NET_DVR_SCHEDTIMEWEEK[7];
        public byte[] byRelRecordChan = new byte[16];
        public byte[] byEnablePreset = new byte[16];
        public byte[] byPresetNo = new byte[16];
        public byte[] byEnableCruise = new byte[16];
        public byte[] byCruiseNo = new byte[16];
        public byte[] byEnablePtzTrack = new byte[16];
        public byte[] byPTZTrack = new byte[16];

        public NET_DVR_ALARMINCFG() {
        }
    }

    class NET_DVR_ALARMINCFG_V30 extends SdkStructure {
        public int dwSize;
        public byte[] sAlarmInName = new byte[32];
        public byte byAlarmType;
        public byte byAlarmInHandle;
        public byte[] reservedData = new byte[2];
        public NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmTime = new NET_DVR_SCHEDTIMEWEEK[7];
        public byte[] byRelRecordChan = new byte[64];
        public byte[] byEnablePreset = new byte[64];
        public byte[] byPresetNo = new byte[64];
        public byte[] byEnablePresetRevert = new byte[64];
        public short[] wPresetRevertDelay = new short[64];
        public byte[] byEnableCruise = new byte[64];
        public byte[] byCruiseNo = new byte[64];
        public byte[] byEnablePtzTrack = new byte[64];
        public byte[] byPTZTrack = new byte[64];
        public byte[] byRes = new byte[16];

        public NET_DVR_ALARMINCFG_V30() {
        }
    }

    class NET_DVR_ALARMINFO extends SdkStructure {
        public int dwAlarmType;
        public int dwAlarmInputNumber;
        public int[] dwAlarmOutputNumber = new int[4];
        public int[] dwAlarmRelateChannel = new int[16];
        public int[] dwChannel = new int[16];
        public int[] dwDiskNumber = new int[16];

        public NET_DVR_ALARMINFO() {
        }
    }

    class NET_DVR_ALARMINFO_EX extends SdkStructure {
        public int dwAlarmType;
        public int dwAlarmInputNumber;
        public int[] dwAlarmOutputNumber = new int[4];
        public int[] dwAlarmRelateChannel = new int[16];
        public int[] dwChannel = new int[16];
        public int[] dwDiskNumber = new int[16];
        public byte[] sSerialNumber = new byte[48];
        public byte[] sRemoteAlarmIP = new byte[16];

        public NET_DVR_ALARMINFO_EX() {
        }
    }

    class NET_DVR_ALARMINFO_V30 extends SdkStructure {
        public int dwAlarmType;
        public int dwAlarmInputNumber;
        public byte[] byAlarmOutputNumber = new byte[96];
        public byte[] byAlarmRelateChannel = new byte[64];
        public byte[] byChannel = new byte[64];
        public byte[] byDiskNumber = new byte[33];

        public NET_DVR_ALARMINFO_V30() {
        }
    }

    class NET_DVR_ALARMINFO_V40 extends SdkStructure {
        public NET_DVR_ALRAM_FIXED_HEADER struAlarmFixedHeader = new NET_DVR_ALRAM_FIXED_HEADER();
        public Pointer pAlarmData;

        public NET_DVR_ALARMINFO_V40() {
        }
    }

    class NET_DVR_ALARMOUTCFG extends SdkStructure {
        public int dwSize;
        public byte[] sAlarmOutName = new byte[32];
        public int dwAlarmOutDelay;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmOutTime = new NET_DVR_SCHEDTIMEWEEK[7];

        public NET_DVR_ALARMOUTCFG() {
        }
    }

    class NET_DVR_ALARMOUTCFG_V30 extends SdkStructure {
        public int dwSize;
        public byte[] sAlarmOutName = new byte[32];
        public int dwAlarmOutDelay;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmOutTime = new NET_DVR_SCHEDTIMEWEEK[7];
        public byte[] byRes = new byte[16];

        public NET_DVR_ALARMOUTCFG_V30() {
        }
    }

    class NET_DVR_ALARMOUTSTATUS extends SdkStructure {
        public byte[] Output = new byte[4];

        public NET_DVR_ALARMOUTSTATUS() {
        }
    }

    class NET_DVR_ALARMOUTSTATUS_V30 extends SdkStructure {
        public byte[] Output = new byte[96];

        public NET_DVR_ALARMOUTSTATUS_V30() {
        }
    }

    class NET_DVR_ALARM_ISAPI_INFO extends SdkStructure {
        public Pointer pAlarmData;
        public int dwAlarmDataLen;
        public byte byDataType;
        public byte byPicturesNumber;
        public byte[] byRes = new byte[2];
        public Pointer pPicPackData;
        public byte[] byRes1 = new byte[32];

        public NET_DVR_ALARM_ISAPI_INFO() {
        }
    }

    class NET_DVR_ALARM_ISAPI_PICDATA extends SdkStructure {
        public int dwPicLen;
        public byte byPicType;
        public byte[] byRes = new byte[3];
        public byte[] szFilename = new byte[256];
        public Pointer pPicData;

        public NET_DVR_ALARM_ISAPI_PICDATA() {
        }
    }

    class NET_DVR_ALRAM_FIXED_HEADER extends SdkStructure {
        public int dwAlarmType;
        public NET_DVR_TIME_EX struAlarmTime = new NET_DVR_TIME_EX();
        public uStruAlarm ustruAlarm = new uStruAlarm();

        public NET_DVR_ALRAM_FIXED_HEADER() {
        }
    }

    class NET_DVR_AREAINFOCFG extends SdkStructure {
        public short wNationalityID;
        public short wProvinceID;
        public short wCityID;
        public short wCountyID;
        public int dwCode;

        public NET_DVR_AREAINFOCFG() {
        }
    }

    class NET_DVR_AUXOUTCFG extends SdkStructure {
        public int dwSize;
        public int dwAlarmOutChan;
        public int dwAlarmChanSwitchTime;
        public int[] dwAuxSwitchTime = new int[4];
        public byte[][] byAuxOrder = new byte[4][16];

        public NET_DVR_AUXOUTCFG() {
        }
    }

    class NET_DVR_CARDINFO extends SdkStructure {
        public int lChannel;
        public int lLinkMode;
        public String sMultiCastIP;
        public NET_DVR_DISPLAY_PARA struDisplayPara;

        public NET_DVR_CARDINFO() {
        }
    }

    class NET_DVR_CARD_CFG extends SdkStructure {
        public int dwSize;
        public int dwModifyParamType;
        public byte[] byCardNo = new byte[32];
        public byte byCardValid;
        public byte byCardType;
        public byte byLeaderCard;
        public byte byRes1;
        public int dwDoorRight;
        public NET_DVR_VALID_PERIOD_CFG struValid;
        public int dwBelongGroup;
        public byte[] byCardPassword = new byte[8];
        public CARDRIGHTPLAN[] byCardRightPlan = new CARDRIGHTPLAN[32];
        public int dwMaxSwipeTime;
        public int dwSwipeTime;
        public short wRoomNumber;
        public short wFloorNumber;
        public byte[] byRes2 = new byte[20];

        public NET_DVR_CARD_CFG() {
        }
    }

    /**
     * 卡参数配置条件结构体
     * 设置卡参数（下发卡参数）时，如果将byCheckCardNo置为0，那么设备将不校验应用层下发的卡号信息，直接写入本地存储，
     * 可以一定程度提高卡号下发的速度，但是需要上层应用自己保证卡号信息不重复（整型值不能重复，比如，不能同时含有1和01这两种卡号）
     *
     * @author Liao.yx
     * @date 2020年4月26日09:21:07
     */
    class NET_DVR_CARD_CFG_COND extends SdkStructure {
        public int dwSize;//结构体大小
        public int dwCardNum;//设置或获取卡数量，获取时置为0xffffffff表示获取所有卡信息 
        public byte byCheckCardNo;//设备是否进行卡号校验：0：不校验，1：校验
        public byte[] ibyRes = new byte[31];//保留，置为0

        public NET_DVR_CARD_CFG_COND() {
        }
    }

    class NET_DVR_CARD_CFG_SEND_DATA extends SdkStructure {
        public int dwSize;
        public byte[] byCardNo = new byte[32];
        public byte[] byRes = new byte[16];

        public NET_DVR_CARD_CFG_SEND_DATA() {
        }
    }

    class NET_DVR_CARD_CFG_V50 extends SdkStructure {
        public int dwSize;
        public int dwModifyParamType;
        public byte[] byCardNo = new byte[32];
        public byte byCardValid;
        public byte byCardType;
        public byte byLeaderCard;
        public byte byRes1;
        public byte[] byDoorRight = new byte[256];
        public NET_DVR_VALID_PERIOD_CFG struValid;
        public byte[] byBelongGroup = new byte[128];
        public byte[] byCardPassword = new byte[8];
        public CARDRIGHTPLAN_WORD[] wCardRightPlan = new CARDRIGHTPLAN_WORD[256];
        public int dwMaxSwipeTime;
        public int dwSwipeTime;
        public short wRoomNumber;
        public short wFloorNumber;
        public int dwEmployeeNo;
        public byte[] byName = new byte[32];
        public short wDepartmentNo;
        public short wSchedulePlanNo;
        public byte bySchedulePlanType;
        public byte byRightType;
        public byte[] byRes2 = new byte[2];
        public int dwLockID;
        public byte[] byLockCode = new byte[8];
        public byte[] byRoomCode = new byte[8];
        public int dwCardRight;
        public int dwPlanTemplate;
        public int dwCardUserId;
        public byte byCardModelType;
        public byte[] byRes3 = new byte[83];

        public NET_DVR_CARD_CFG_V50() {
        }
    }

    class NET_DVR_CHANNELSTATE extends SdkStructure {
        public byte byRecordStatic;
        public byte bySignalStatic;
        public byte byHardwareStatic;
        public byte reservedData;
        public int dwBitRate;
        public int dwLinkNum;
        public int[] dwClientIP = new int[6];

        public NET_DVR_CHANNELSTATE() {
        }
    }

    class NET_DVR_CHANNELSTATE_V30 extends SdkStructure {
        public byte byRecordStatic;
        public byte bySignalStatic;
        public byte byHardwareStatic;
        public byte reservedData;
        public int dwBitRate;
        public int dwLinkNum;
        public NET_DVR_IPADDR[] struClientIP = new NET_DVR_IPADDR[6];
        public int dwIPLinkNum;
        public byte[] byRes = new byte[12];

        public NET_DVR_CHANNELSTATE_V30() {
        }
    }

    class NET_DVR_CHANNEL_GROUP extends SdkStructure {
        public int dwSize;
        public int dwChannel;
        public int dwGroup;
        public byte byID;
        public byte[] byRes1 = new byte[3];
        public int dwPositionNo;
        public byte[] byRes = new byte[56];

        public NET_DVR_CHANNEL_GROUP() {
        }
    }

    class NET_DVR_CLIENTINFO extends SdkStructure {
        public int lChannel;
        public int lLinkMode;
        public HWND hPlayWnd;
        public String sMultiCastIP;

        public NET_DVR_CLIENTINFO() {
        }
    }

    class NET_DVR_COLOR extends SdkStructure {
        public byte byBrightness;
        public byte byContrast;
        public byte bySaturation;
        public byte byHue;

        public NET_DVR_COLOR() {
        }
    }

    class NET_DVR_COMPRESSIONCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_COMPRESSION_INFO struRecordPara;
        public NET_DVR_COMPRESSION_INFO struNetPara;

        public NET_DVR_COMPRESSIONCFG() {
        }
    }

    class NET_DVR_COMPRESSIONCFG_EX extends SdkStructure {
        public int dwSize;
        public NET_DVR_COMPRESSION_INFO_EX struRecordPara;
        public NET_DVR_COMPRESSION_INFO_EX struNetPara;

        public NET_DVR_COMPRESSIONCFG_EX() {
        }
    }

    class NET_DVR_COMPRESSIONCFG_NEW extends SdkStructure {
        public int dwSize;
        public NET_DVR_COMPRESSION_INFO_EX struLowCompression;
        public NET_DVR_COMPRESSION_INFO_EX struEventCompression;

        public NET_DVR_COMPRESSIONCFG_NEW() {
        }
    }

    class NET_DVR_COMPRESSIONCFG_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara;
        public NET_DVR_COMPRESSION_INFO_V30 struRes;
        public NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara;
        public NET_DVR_COMPRESSION_INFO_V30 struNetPara;

        public NET_DVR_COMPRESSIONCFG_V30() {
        }
    }

    class NET_DVR_COMPRESSION_AUDIO extends SdkStructure {
        public byte byAudioEncType;
        public byte[] byres = new byte[7];

        public NET_DVR_COMPRESSION_AUDIO() {
        }
    }

    class NET_DVR_COMPRESSION_INFO extends SdkStructure {
        public byte byStreamType;
        public byte byResolution;
        public byte byBitrateType;
        public byte byPicQuality;
        public int dwVideoBitrate;
        public int dwVideoFrameRate;

        public NET_DVR_COMPRESSION_INFO() {
        }
    }

    class NET_DVR_COMPRESSION_INFO_EX extends SdkStructure {
        public byte byStreamType;
        public byte byResolution;
        public byte byBitrateType;
        public byte byPicQuality;
        public int dwVideoBitrate;
        public int dwVideoFrameRate;
        public short wIntervalFrameI;
        public byte byIntervalBPFrame;
        public byte byENumber;

        public NET_DVR_COMPRESSION_INFO_EX() {
        }
    }

    class NET_DVR_COMPRESSION_INFO_V30 extends SdkStructure {
        public byte byStreamType;
        public byte byResolution;
        public byte byBitrateType;
        public byte byPicQuality;
        public int dwVideoBitrate;
        public int dwVideoFrameRate;
        public short wIntervalFrameI;
        public byte byIntervalBPFrame;
        public byte byENumber;
        public byte byVideoEncType;
        public byte byAudioEncType;
        public byte[] byres = new byte[10];

        public NET_DVR_COMPRESSION_INFO_V30() {
        }
    }

    class NET_DVR_CRUISE_PARA extends SdkStructure {
        public int dwSize;
        public byte[] byPresetNo = new byte[32];
        public byte[] byCruiseSpeed = new byte[32];
        public short[] wDwellTime = new short[32];
        public byte[] byEnableThisCruise;
        public byte[] res = new byte[15];

        public NET_DVR_CRUISE_PARA() {
        }
    }

    class NET_DVR_CRUISE_POINT extends SdkStructure {
        public byte PresetNum;
        public byte Dwell;
        public byte Speed;
        public byte Reserve;

        public NET_DVR_CRUISE_POINT() {
        }
    }

    class NET_DVR_CRUISE_RET extends SdkStructure {
        public NET_DVR_CRUISE_POINT[] struCruisePoint = new NET_DVR_CRUISE_POINT[32];

        public NET_DVR_CRUISE_RET() {
        }
    }

    class NET_DVR_DATE extends SdkStructure {
        public short wYear;
        public byte byMonth;
        public byte byDay;

        public NET_DVR_DATE() {
        }
    }

    class NET_DVR_DDNS extends SdkStructure {
        public byte[] sUsername = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte[] sDomainName = new byte[64];
        public byte[] sServerName = new byte[64];
        public short wDDNSPort;
        public byte[] byRes = new byte[10];

        public NET_DVR_DDNS() {
        }
    }

    class NET_DVR_DDNSPARA extends SdkStructure {
        public byte[] sUsername = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte[] sDomainName = new byte[64];
        public byte byEnableDDNS;
        public byte[] res = new byte[15];

        public NET_DVR_DDNSPARA() {
        }
    }

    class NET_DVR_DDNSPARA_EX extends SdkStructure {
        public byte byHostIndex;
        public byte byEnableDDNS;
        public short wDDNSPort;
        public byte[] sUsername = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte[] sDomainName = new byte[64];
        public byte[] sServerName = new byte[64];
        public byte[] byRes = new byte[16];

        public NET_DVR_DDNSPARA_EX() {
        }
    }

    class NET_DVR_DDNSPARA_V30 extends SdkStructure {
        public byte byEnableDDNS;
        public byte byHostIndex;
        public byte[] byRes1 = new byte[2];
        public NET_DVR_DDNS[] struDDNS = new NET_DVR_DDNS[10];
        public byte[] byRes2 = new byte[16];

        public NET_DVR_DDNSPARA_V30() {
        }
    }

    class NET_DVR_DECCFG extends SdkStructure {
        public int dwSize;
        public int dwDecChanNum;
        public NET_DVR_DECINFO[] struDecInfo = new NET_DVR_DECINFO[4];

        public NET_DVR_DECCFG() {
        }
    }

    class NET_DVR_DECCHANINFO extends SdkStructure {
        public byte[] sDVRIP = new byte[16];
        public short wDVRPort;
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte byChannel;
        public byte byLinkMode;
        public byte byLinkType;

        public NET_DVR_DECCHANINFO() {
        }
    }

    class NET_DVR_DECCHANSTATUS extends SdkStructure {
        public int dwWorkType;
        public byte[] sDVRIP = new byte[16];
        public short wDVRPort;
        public byte byChannel;
        public byte byLinkMode;
        public int dwLinkType;
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte[] cReserve = new byte[52];

        public NET_DVR_DECCHANSTATUS() {
        }

        public static class objectInfo extends Union {
            public objectInfo() {
            }

            public static class fileInfo extends SdkStructure {
                public byte[] fileName = new byte[100];

                public fileInfo() {
                }
            }

            public static class timeInfo extends SdkStructure {
                public int dwChannel;
                public byte[] sUserName = new byte[32];
                public byte[] sPassword = new byte[16];
                public NET_DVR_TIME struStartTime;
                public NET_DVR_TIME struStopTime;

                public timeInfo() {
                }
            }

            public static class userInfo extends SdkStructure {
                public byte[] sUserName = new byte[32];
                public byte[] sPassword = new byte[16];
                public byte[] cReserve = new byte[52];

                public userInfo() {
                }
            }
        }
    }

    class NET_DVR_DECINFO extends SdkStructure {
        public byte byPoolChans;
        public NET_DVR_DECCHANINFO[] struchanConInfo = new NET_DVR_DECCHANINFO[4];
        public byte byEnablePoll;
        public byte byPoolTime;

        public NET_DVR_DECINFO() {
        }
    }

    class NET_DVR_DECODERCFG extends SdkStructure {
        public int dwSize;
        public int dwBaudRate;
        public byte byDataBit;
        public byte byStopBit;
        public byte byParity;
        public byte byFlowcontrol;
        public short wDecoderType;
        public short wDecoderAddress;
        public byte[] bySetPreset = new byte[128];
        public byte[] bySetCruise = new byte[128];
        public byte[] bySetTrack = new byte[128];

        public NET_DVR_DECODERCFG() {
        }
    }

    class NET_DVR_DECODERCFG_V30 extends SdkStructure {
        public int dwSize;
        public int dwBaudRate;
        public byte byDataBit;
        public byte byStopBit;
        public byte byParity;
        public byte byFlowcontrol;
        public short wDecoderType;
        public short wDecoderAddress;
        public byte[] bySetPreset = new byte[256];
        public byte[] bySetCruise = new byte[256];
        public byte[] bySetTrack = new byte[256];

        public NET_DVR_DECODERCFG_V30() {
        }
    }

    class NET_DVR_DECODERINFO extends SdkStructure {
        public byte[] byEncoderIP = new byte[16];
        public byte[] byEncoderUser = new byte[16];
        public byte[] byEncoderPasswd = new byte[16];
        public byte bySendMode;
        public byte byEncoderChannel;
        public short wEncoderPort;
        public byte[] reservedData = new byte[4];

        public NET_DVR_DECODERINFO() {
        }
    }

    class NET_DVR_DECODERSTATE extends SdkStructure {
        public byte[] byEncoderIP = new byte[16];
        public byte[] byEncoderUser = new byte[16];
        public byte[] byEncoderPasswd = new byte[16];
        public byte byEncoderChannel;
        public byte bySendMode;
        public short wEncoderPort;
        public int dwConnectState;
        public byte[] reservedData = new byte[4];

        public NET_DVR_DECODERSTATE() {
        }
    }

    class NET_DVR_DECSTATUS extends SdkStructure {
        public int dwSize;
        public NET_DVR_DECCHANSTATUS[] struDecState = new NET_DVR_DECCHANSTATUS[4];

        public NET_DVR_DECSTATUS() {
        }
    }

    class NET_DVR_DEL_FACE_PARAM_MODE extends Union {
        public byte[] uLen = new byte[588];
        public NET_DVR_FACE_PARAM_BYCARD struByCard;
        public NET_DVR_FACE_PARAM_BYREADER struByReader;

        public NET_DVR_DEL_FACE_PARAM_MODE() {
        }
    }

    class NET_DVR_DEVICECFG extends SdkStructure {
        public int dwSize;
        public byte[] sDVRName = new byte[32];
        public int dwDVRID;
        public int dwRecycleRecord;
        public byte[] sSerialNumber = new byte[48];
        public int dwSoftwareVersion;
        public int dwSoftwareBuildDate;
        public int dwDSPSoftwareVersion;
        public int dwDSPSoftwareBuildDate;
        public int dwPanelVersion;
        public int dwHardwareVersion;
        public byte byAlarmInPortNum;
        public byte byAlarmOutPortNum;
        public byte byRS232Num;
        public byte byRS485Num;
        public byte byNetworkPortNum;
        public byte byDiskCtrlNum;
        public byte byDiskNum;
        public byte byDVRType;
        public byte byChanNum;
        public byte byStartChan;
        public byte byDecordChans;
        public byte byVGANum;
        public byte byUSBNum;
        public byte byAuxoutNum;
        public byte byAudioNum;
        public byte byIPChanNum;

        public NET_DVR_DEVICECFG() {
        }
    }

    class NET_DVR_DEVICEINFO extends SdkStructure {
        public byte[] sSerialNumber = new byte[48];
        public byte byAlarmInPortNum;
        public byte byAlarmOutPortNum;
        public byte byDiskNum;
        public byte byDVRType;
        public byte byChanNum;
        public byte byStartChan;

        public NET_DVR_DEVICEINFO() {
        }
    }

    class NET_DVR_DEVICEINFO_V30 extends SdkStructure {
        public byte[] sSerialNumber = new byte[48];
        public byte byAlarmInPortNum;
        public byte byAlarmOutPortNum;
        public byte byDiskNum;
        public byte byDVRType;
        public byte byChanNum;
        public byte byStartChan;
        public byte byAudioChanNum;
        public byte byIPChanNum;
        public byte byZeroChanNum;
        public byte byMainProto;
        public byte bySubProto;
        public byte bySupport;
        public byte bySupport1;
        public byte bySupport2;
        public short wDevType;
        public byte bySupport3;
        public byte byMultiStreamProto;
        public byte byStartDChan;
        public byte byStartDTalkChan;
        public byte byHighDChanNum;
        public byte bySupport4;
        public byte byLanguageType;
        public byte byVoiceInChanNum;
        public byte byStartVoiceInChanNo;
        public byte bySupport5;
        public byte bySupport6;
        public byte byMirrorChanNum;
        public short wStartMirrorChanNo;
        public byte bySupport7;
        public byte byRes2;

        public NET_DVR_DEVICEINFO_V30() {
        }
    }

    class NET_DVR_DEVICEINFO_V40 extends SdkStructure {
        public NET_DVR_DEVICEINFO_V30 struDeviceV30 = new NET_DVR_DEVICEINFO_V30();
        public byte bySupportLock;
        public byte byRetryLoginTime;
        public byte byPasswordLevel;
        public byte byRes1;
        public int dwSurplusLockTime;
        public byte[] byRes2 = new byte[256];

        public NET_DVR_DEVICEINFO_V40() {
        }
    }

    class NET_DVR_DIRECTION extends SdkStructure {
        public NET_VCA_POINT struStartPoint = new NET_VCA_POINT();
        public NET_VCA_POINT struEndPoint = new NET_VCA_POINT();

        public NET_DVR_DIRECTION() {
        }
    }

    class NET_DVR_DISKSTATE extends SdkStructure {
        public int dwVolume;
        public int dwFreeSpace;
        public int dwHardDiskStatic;

        public NET_DVR_DISKSTATE() {
        }
    }

    class NET_DVR_DISPLAY_PARA extends SdkStructure {
        public int bToScreen;
        public int bToVideoOut;
        public int nLeft;
        public int nTop;
        public int nWidth;
        public int nHeight;
        public int nReserved;

        public NET_DVR_DISPLAY_PARA() {
        }
    }

    class NET_DVR_EMAILCFG extends SdkStructure {
        public int dwSize;
        public byte[] sUserName = new byte[32];
        public byte[] sPassWord = new byte[32];
        public byte[] sFromName = new byte[32];
        public byte[] sFromAddr = new byte[48];
        public byte[] sToName1 = new byte[32];
        public byte[] sToName2 = new byte[32];
        public byte[] sToAddr1 = new byte[48];
        public byte[] sToAddr2 = new byte[48];
        public byte[] sEmailServer = new byte[32];
        public byte byServerType;
        public byte byUseAuthen;
        public byte byAttachment;
        public byte byMailinterval;

        public NET_DVR_EMAILCFG() {
        }
    }

    class NET_DVR_EMAILCFG_V30 extends SdkStructure {
        public int dwSize;
        public byte[] sAccount = new byte[32];
        public byte[] sPassword = new byte[32];
        public NET_DVR_SENDER struSender;
        public byte[] sSmtpServer = new byte[48];
        public byte[] sPop3Server = new byte[48];
        public NET_DVRRECEIVER[] struReceiver = new NET_DVRRECEIVER[3];
        public byte byAttachment;
        public byte bySmtpServerVerify;
        public byte byMailInterval;
        public byte[] res = new byte[77];

        public NET_DVR_EMAILCFG_V30() {
        }
    }

    class NET_DVR_EMAILPARA extends SdkStructure {
        public byte[] sUsername = new byte[64];
        public byte[] sPassword = new byte[64];
        public byte[] sSmtpServer = new byte[64];
        public byte[] sPop3Server = new byte[64];
        public byte[] sMailAddr = new byte[64];
        public byte[] sEventMailAddr1 = new byte[64];
        public byte[] sEventMailAddr2 = new byte[64];
        public byte[] res = new byte[16];

        public NET_DVR_EMAILPARA() {
        }
    }

    class NET_DVR_ETHERNET extends SdkStructure {
        public byte[] sDVRIP = new byte[16];
        public byte[] sDVRIPMask = new byte[16];
        public int dwNetInterface;
        public short wDVRPort;
        public byte[] byMACAddr = new byte[6];

        public NET_DVR_ETHERNET() {
        }
    }

    class NET_DVR_ETHERNET_V30 extends SdkStructure {
        public NET_DVR_IPADDR struDVRIP;
        public NET_DVR_IPADDR struDVRIPMask;
        public int dwNetInterface;
        public short wDVRPort;
        public short wMTU;
        public byte[] byMACAddr = new byte[6];

        public NET_DVR_ETHERNET_V30() {
        }

        public String toString() {
            return "NET_DVR_ETHERNET_V30.struDVRIP: \n" + this.struDVRIP + "\n" + "NET_DVR_ETHERNET_V30.struDVRIPMask: \n" + this.struDVRIPMask + "\n" + "NET_DVR_ETHERNET_V30.dwNetInterface: " + this.dwNetInterface + "\n" + "NET_DVR_ETHERNET_V30.wDVRPort: " + this.wDVRPort + "\n" + "NET_DVR_ETHERNET_V30.wMTU: " + this.wMTU + "\n" + "NET_DVR_ETHERNET_V30.byMACAddr: " + new String(this.byMACAddr) + "\n";
        }
    }

    class NET_DVR_EXCEPTION extends SdkStructure {
        public int dwSize;
        public NET_DVR_HANDLEEXCEPTION[] struExceptionHandleType = new NET_DVR_HANDLEEXCEPTION[16];

        public NET_DVR_EXCEPTION() {
        }
    }

    class NET_DVR_EXCEPTION_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_HANDLEEXCEPTION_V30[] struExceptionHandleType = new NET_DVR_HANDLEEXCEPTION_V30[32];

        public NET_DVR_EXCEPTION_V30() {
        }
    }

    class NET_DVR_FACE_PARAM_BYCARD extends SdkStructure {
        public byte[] byCardNo = new byte[32];
        public byte[] byEnableCardReader = new byte[512];
        public byte[] byFaceID = new byte[2];
        public byte[] byRes1 = new byte[42];

        public NET_DVR_FACE_PARAM_BYCARD() {
        }
    }

    class NET_DVR_FACE_PARAM_BYREADER extends SdkStructure {
        public int dwCardReaderNo;
        public byte byClearAllCard;
        public byte[] byRes1 = new byte[3];
        public byte[] byCardNo = new byte[32];
        public byte[] byRes = new byte[548];

        public NET_DVR_FACE_PARAM_BYREADER() {
        }
    }

    class NET_DVR_FACE_PARAM_CFG extends SdkStructure {
        public int dwSize;
        public byte[] byCardNo = new byte[32];
        public int dwFaceLen;
        public Pointer pFaceBuffer;
        public byte[] byEnableCardReader = new byte[512];
        public byte byFaceID;
        public byte byFaceDataType;
        public byte[] byRes = new byte[126];

        public NET_DVR_FACE_PARAM_CFG() {
        }
    }

    class NET_DVR_FACE_PARAM_COND extends SdkStructure {
        public int dwSize;
        public byte[] byCardNo = new byte[32];
        public byte[] byEnableCardReader = new byte[512];
        public int dwFaceNum;
        public byte byFaceID;
        public byte[] byRes = new byte[127];

        public NET_DVR_FACE_PARAM_COND() {
        }
    }

    class NET_DVR_FACE_PARAM_CTRL extends SdkStructure {
        public int dwSize;
        public byte byMode;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_DEL_FACE_PARAM_MODE struProcessMode;
        public byte[] byRes = new byte[64];

        public NET_DVR_FACE_PARAM_CTRL() {
        }
    }

    class NET_DVR_FACE_PARAM_STATUS extends SdkStructure {
        public int dwSize;
        public byte[] byCardNo = new byte[32];
        public byte[] byCardReaderRecvStatus = new byte[512];
        public byte[] byErrorMsg = new byte[32];
        public int dwCardReaderNo;
        public byte byTotalStatus;
        public byte byFaceID;
        public byte[] byRes = new byte[130];

        public NET_DVR_FACE_PARAM_STATUS() {
        }
    }

    class NET_DVR_FILECOND extends SdkStructure {
        public int lChannel;
        public int dwFileType;
        public int dwIsLocked;
        public int dwUseCardNo;
        public byte[] sCardNumber = new byte[32];
        public NET_DVR_TIME struStartTime;
        public NET_DVR_TIME struStopTime;

        public NET_DVR_FILECOND() {
        }
    }

    class NET_DVR_FINDDATA_CARD extends SdkStructure {
        public byte[] sFileName = new byte[100];
        public NET_DVR_TIME struStartTime;
        public NET_DVR_TIME struStopTime;
        public int dwFileSize;
        public byte[] sCardNum = new byte[32];

        public NET_DVR_FINDDATA_CARD() {
        }
    }

    class NET_DVR_FINDDATA_V30 extends SdkStructure {
        public byte[] sFileName = new byte[100];
        public NET_DVR_TIME struStartTime;
        public NET_DVR_TIME struStopTime;
        public int dwFileSize;
        public byte[] sCardNum = new byte[32];
        public byte byLocked;
        public byte[] byRes = new byte[3];

        public NET_DVR_FINDDATA_V30() {
        }
    }

    class NET_DVR_FIND_DATA extends SdkStructure {
        public byte[] sFileName = new byte[100];
        public NET_DVR_TIME struStartTime;
        public NET_DVR_TIME struStopTime;
        public int dwFileSize;

        public NET_DVR_FIND_DATA() {
        }
    }

    class NET_DVR_FRAMEFORMAT extends SdkStructure {
        public int dwSize;
        public byte[] sATMIP = new byte[16];
        public int dwATMType;
        public int dwInputMode;
        public int dwFrameSignBeginPos;
        public int dwFrameSignLength;
        public byte[] byFrameSignContent = new byte[12];
        public int dwCardLengthInfoBeginPos;
        public int dwCardLengthInfoLength;
        public int dwCardNumberInfoBeginPos;
        public int dwCardNumberInfoLength;
        public int dwBusinessTypeBeginPos;
        public int dwBusinessTypeLength;
        public NET_DVR_FRAMETYPECODE[] frameTypeCode = new NET_DVR_FRAMETYPECODE[10];

        public NET_DVR_FRAMEFORMAT() {
        }
    }

    class NET_DVR_FRAMEFORMAT_EX extends SdkStructure {
        public int dwSize;
        public byte[] sATMIP = new byte[16];
        public int dwATMType;
        public int dwInputMode;
        public int dwFrameSignBeginPos;
        public int dwFrameSignLength;
        public byte[] byFrameSignContent = new byte[12];
        public int dwCardLengthInfoBeginPos;
        public int dwCardLengthInfoLength;
        public int dwCardNumberInfoBeginPos;
        public int dwCardNumberInfoLength;
        public int dwBusinessTypeBeginPos;
        public int dwBusinessTypeLength;
        public NET_DVR_FRAMETYPECODE[] frameTypeCode = new NET_DVR_FRAMETYPECODE[10];
        public byte[] sFTPIP = new byte[16];
        public byte[] byFtpUsername = new byte[32];
        public byte[] byFtpPasswd = new byte[16];
        public byte[] sDirName = new byte[32];
        public int dwATMSrvType;
        public int dwTimeSpace;
        public NET_DVR_FTPTYPECODE[] sFtpTypeCodeOp = new NET_DVR_FTPTYPECODE[300];
        public int dwADPlay;
        public int dwNewPort;

        public NET_DVR_FRAMEFORMAT_EX() {
        }
    }

    class NET_DVR_FRAMEFORMAT_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_IPADDR struATMIP;
        public int dwATMType;
        public int dwInputMode;
        public int dwFrameSignBeginPos;
        public int dwFrameSignLength;
        public byte[] byFrameSignContent = new byte[12];
        public int dwCardLengthInfoBeginPos;
        public int dwCardLengthInfoLength;
        public int dwCardNumberInfoBeginPos;
        public int dwCardNumberInfoLength;
        public int dwBusinessTypeBeginPos;
        public int dwBusinessTypeLength;
        public NET_DVR_FRAMETYPECODE[] frameTypeCode = new NET_DVR_FRAMETYPECODE[10];
        public short wATMPort;
        public short wProtocolType;
        public byte[] byRes = new byte[24];

        public NET_DVR_FRAMEFORMAT_V30() {
        }
    }

    class NET_DVR_FRAMETYPECODE extends SdkStructure {
        public byte[] code = new byte[12];

        public NET_DVR_FRAMETYPECODE() {
        }
    }

    class NET_DVR_FTPTYPECODE extends SdkStructure {
        public byte[] sFtpType = new byte[32];
        public byte[] sFtpCode = new byte[8];

        public NET_DVR_FTPTYPECODE() {
        }
    }

    class NET_DVR_GET_GPS_DATA_PARAM extends SdkStructure {
        public int dwCmdType;
        public GpsDataParamUion gpsDataParam;

        public NET_DVR_GET_GPS_DATA_PARAM() {
        }

        public void read() {
            super.read();
            switch (this.dwCmdType) {
                case 0:
                    this.gpsDataParam.setType(TimeSegParam.class);
                    break;
                case 1:
                    this.gpsDataParam.setType(TimePointParam.class);
            }

            this.gpsDataParam.read();
        }

        public void write() {
            super.write();
            this.gpsDataParam.write();
        }
    }

    class NET_DVR_GPS_DATA extends SdkStructure {
        public NET_DVR_GPS_INFO struGPSInfo;
        public NET_DVR_TIME struTime;
        public byte[] byRes = new byte[12];

        public NET_DVR_GPS_DATA() {
        }
    }

    class NET_DVR_GPS_INFO extends SdkStructure {
        public byte[] byDirection = new byte[2];
        public byte bySvs;
        public byte byLocateMode;
        public short wHDOP;
        public short wHeight;
        public int dwLatitude;
        public int dwLongitude;
        public int dwVehicleSpeed;
        public int dwVehicleDirection;
        public byte[] byRes = new byte[8];

        public NET_DVR_GPS_INFO() {
        }
    }

    class NET_DVR_HANDLEEXCEPTION extends SdkStructure {
        public int dwHandleType;
        public byte[] byRelAlarmOut = new byte[4];

        public NET_DVR_HANDLEEXCEPTION() {
        }
    }

    class NET_DVR_HANDLEEXCEPTION_V30 extends SdkStructure {
        public int dwHandleType;
        public byte[] byRelAlarmOut = new byte[96];

        public NET_DVR_HANDLEEXCEPTION_V30() {
        }
    }

    class NET_DVR_HANDLEEXCEPTION_V40 extends SdkStructure {
        public int dwHandleType;
        public int dwMaxRelAlarmOutChanNum;
        public int dwRelAlarmOutChanNum;
        public int[] dwRelAlarmOut = new int[64];
        public byte[] byRes = new byte[64];

        public NET_DVR_HANDLEEXCEPTION_V40() {
        }
    }

    class NET_DVR_HDCFG extends SdkStructure {
        public int dwSize;
        public int dwHDCount;
        public NET_DVR_SINGLE_HD[] struHDInfo = new NET_DVR_SINGLE_HD[33];

        public NET_DVR_HDCFG() {
        }
    }

    class NET_DVR_HDGROUP_CFG extends SdkStructure {
        public int dwSize;
        public int dwHDGroupCount;
        public NET_DVR_SINGLE_HDGROUP[] struHDGroupAttr = new NET_DVR_SINGLE_HDGROUP[16];

        public NET_DVR_HDGROUP_CFG() {
        }
    }

    class NET_DVR_HIDEALARM extends SdkStructure {
        public int dwEnableHideAlarm;
        public short wHideAlarmAreaTopLeftX;
        public short wHideAlarmAreaTopLeftY;
        public short wHideAlarmAreaWidth;
        public short wHideAlarmAreaHeight;
        public NET_DVR_HANDLEEXCEPTION strHideAlarmHandleType;

        public NET_DVR_HIDEALARM() {
        }
    }

    class NET_DVR_HIDEALARM_V30 extends SdkStructure {
        public int dwEnableHideAlarm;
        public short wHideAlarmAreaTopLeftX;
        public short wHideAlarmAreaTopLeftY;
        public short wHideAlarmAreaWidth;
        public short wHideAlarmAreaHeight;
        public NET_DVR_HANDLEEXCEPTION_V30 strHideAlarmHandleType;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmTime = new NET_DVR_SCHEDTIMEWEEK[7];

        public NET_DVR_HIDEALARM_V30() {
        }
    }

    class NET_DVR_ID_CARD_INFO extends SdkStructure {
        public int dwSize;
        public byte[] byName = new byte[128];
        public NET_DVR_DATE struBirth;
        public byte[] byAddr = new byte[280];
        public byte[] byIDNum = new byte[32];
        public byte[] byIssuingAuthority = new byte[128];
        public NET_DVR_DATE struStartDate;
        public NET_DVR_DATE struEndDate;
        public byte byTermOfValidity;
        public byte bySex;
        public byte byNation;
        public byte[] byRes = new byte[101];

        public NET_DVR_ID_CARD_INFO() {
        }
    }

    class NET_DVR_ID_CARD_INFO_ALARM extends SdkStructure {
        public int dwSize;
        public NET_DVR_ID_CARD_INFO struIDCardCfg = new NET_DVR_ID_CARD_INFO();
        public int dwMajor;
        public int dwMinor;
        public NET_DVR_TIME_V30 struSwipeTime = new NET_DVR_TIME_V30();
        public byte[] byNetUser = new byte[16];
        public NET_DVR_IPADDR struRemoteHostAddr = new NET_DVR_IPADDR();
        public int dwCardReaderNo;
        public int dwDoorNo;
        public int dwPicDataLen;
        public Pointer pPicData;
        public byte byCardType;
        public byte byDeviceNo;
        public byte[] byRes2 = new byte[2];
        public int dwFingerPrintDataLen;
        public Pointer pFingerPrintData;
        public int dwCapturePicDataLen;
        public Pointer pCapturePicData;
        public byte[] byRes = new byte[188];

        public NET_DVR_ID_CARD_INFO_ALARM() {
        }
    }

    class NET_DVR_IPADDR extends SdkStructure {
        public byte[] sIpV4 = new byte[16];
        public byte[] byRes = new byte[128];

        public NET_DVR_IPADDR() {
        }

        public String toString() {
            return "NET_DVR_IPADDR.sIpV4: " + new String(this.sIpV4) + "\n" + "NET_DVR_IPADDR.byRes: " + new String(this.byRes) + "\n";
        }
    }

    class NET_DVR_IPALARMINCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_IPALARMININFO[] struIPAlarmInInfo = new NET_DVR_IPALARMININFO[128];

        public NET_DVR_IPALARMINCFG() {
        }
    }

    class NET_DVR_IPALARMINFO extends SdkStructure {
        public NET_DVR_IPDEVINFO[] struIPDevInfo = new NET_DVR_IPDEVINFO[32];
        public byte[] byAnalogChanEnable = new byte[32];
        public NET_DVR_IPCHANINFO[] struIPChanInfo = new NET_DVR_IPCHANINFO[32];
        public NET_DVR_IPALARMININFO[] struIPAlarmInInfo = new NET_DVR_IPALARMININFO[128];
        public NET_DVR_IPALARMOUTINFO[] struIPAlarmOutInfo = new NET_DVR_IPALARMOUTINFO[64];

        public NET_DVR_IPALARMINFO() {
        }
    }

    class NET_DVR_IPALARMININFO extends SdkStructure {
        public byte byIPID;
        public byte byAlarmIn;
        public byte[] byRes = new byte[18];

        public NET_DVR_IPALARMININFO() {
        }
    }

    class NET_DVR_IPALARMOUTCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_IPALARMOUTINFO[] struIPAlarmOutInfo = new NET_DVR_IPALARMOUTINFO[64];

        public NET_DVR_IPALARMOUTCFG() {
        }
    }

    class NET_DVR_IPALARMOUTINFO extends SdkStructure {
        public byte byIPID;
        public byte byAlarmOut;
        public byte[] byRes = new byte[18];

        public NET_DVR_IPALARMOUTINFO() {
        }
    }

    class NET_DVR_IPCHANINFO extends SdkStructure {
        public byte byEnable;
        public byte byIPID;
        public byte byChannel;
        public byte byIPIDHigh;
        public byte[] byRes = new byte[32];

        public NET_DVR_IPCHANINFO() {
        }
    }

    class NET_DVR_IPDEVINFO extends SdkStructure {
        public int dwEnable;
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public NET_DVR_IPADDR struIP = new NET_DVR_IPADDR();
        public short wDVRPort;
        public byte[] byres = new byte[34];

        public NET_DVR_IPDEVINFO() {
        }
    }

    class NET_DVR_IPDEVINFO_V31 extends SdkStructure {
        public int dwEnable;
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public NET_DVR_IPADDR struIP = new NET_DVR_IPADDR();
        public short wDVRPort;
        public byte[] byres = new byte[34];

        public NET_DVR_IPDEVINFO_V31() {
        }
    }


    class NET_DVR_IPPARACFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_IPDEVINFO[] struIPDevInfo = new NET_DVR_IPDEVINFO[32];
        public byte[] byAnalogChanEnable = new byte[32];
        public NET_DVR_IPCHANINFO[] struIPChanInfo = new NET_DVR_IPCHANINFO[32];

        public NET_DVR_IPPARACFG() {
        }
    }

    class NET_DVR_IPPARACFG_V40 extends SdkStructure {
        public int dwSize;
        public int dwGroupNum;
        public int dwAChanNum;
        public int dwDChanNum;
        public int dwStartDChan;
        public byte[] byAnalogChanEnable = new byte[64];
        public NET_DVR_IPDEVINFO_V31[] struIPDevInfo = new NET_DVR_IPDEVINFO_V31[64];
        public NET_DVR_STREAM_MODE[] struStreamMode = new NET_DVR_STREAM_MODE[64];
        public byte[] byRes2 = new byte[20];

        public NET_DVR_IPPARACFG_V40() {
        }
    }

    class NET_DVR_STREAM_MODE extends SdkStructure {
        public byte byGetStreamType;
        public byte[] byRes = new byte[3];
        public NET_DVR_GET_STREAM_UNION uGetStream;

        public NET_DVR_STREAM_MODE() {
        }
    }

    class NET_DVR_GET_STREAM_UNION extends SdkStructure {
        public NET_DVR_IPCHANINFO struChanInfo;
        public NET_DVR_PU_STREAM_CFG struPUStream;

        public NET_DVR_GET_STREAM_UNION() {
        }
    }

    class NET_DVR_PU_STREAM_CFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_STREAM_MEDIA_SERVER_CFG struStreamMediaSvrCfg;
        public NET_DVR_DEV_CHAN_INFO struDevChanInfo;

        public NET_DVR_PU_STREAM_CFG() {
        }
    }

    class NET_DVR_STREAM_MEDIA_SERVER_CFG extends SdkStructure {
        public byte byValid;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_IPADDR struDevIP;
        public short wDevPort;
        public byte byTransmitType;
        public byte[] byRes2 = new byte[69];

        public NET_DVR_STREAM_MEDIA_SERVER_CFG() {
        }
    }

    class NET_DVR_DEV_CHAN_INFO extends SdkStructure {
        public NET_DVR_IPADDR struIP;
        public short wDevPort;
        public byte byChannel;
        public byte byTransProtocol;
        public byte byTransMode;
        public byte byFactoryType;
        public byte byDeviceType;
        public byte byDispChan;
        public byte bySubDispChan;
        public byte byResolution;
        public byte[] byRes = new byte[2];
        public byte[] byDomain = new byte[64];
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];

        public NET_DVR_DEV_CHAN_INFO() {
        }
    }

    class NET_DVR_JPEGPARA extends SdkStructure {
        public short wPicSize;
        public short wPicQuality;

        public NET_DVR_JPEGPARA() {
        }
    }

    class NET_DVR_LANE_PARAM_V41 extends SdkStructure {
        public byte[] byRuleName = new byte[32];
        public byte byRuleID;
        public byte byLaneType;
        public byte byTrafficState;
        public byte byLaneNo;
        public int dwVaryType;
        public int dwTpsType;
        public int dwLaneVolume;
        public int dwLaneVelocity;
        public int dwTimeHeadway;
        public int dwSpaceHeadway;
        public float fSpaceOccupyRation;
        public float fTimeOccupyRation;
        public int dwLightVehicle;
        public int dwMidVehicle;
        public int dwHeavyVehicle;
        public NET_DVR_LANE_QUEUE struLaneQueue;
        public NET_VCA_POINT struRuleLocation;
        public int dwOversizeVehicle;
        public byte[] byRes2 = new byte[60];

        public NET_DVR_LANE_PARAM_V41() {
        }
    }

    class NET_DVR_LANE_QUEUE extends SdkStructure {
        public NET_VCA_POINT struHead;
        public NET_VCA_POINT struTail;
        public int dwLength;

        public NET_DVR_LANE_QUEUE() {
        }
    }

    class NET_DVR_LOCAL_GENERAL_CFG extends SdkStructure {
        public byte byExceptionCbDirectly;
        public byte byNotSplitRecordFile;
        public byte byResumeUpgradeEnable;
        public byte byAlarmJsonPictureSeparate;
        public byte[] byRes = new byte[4];
        public long i64FileSize;
        public int dwResumeUpgradeTimeout;
        public byte[] byRes1 = new byte[236];

        public NET_DVR_LOCAL_GENERAL_CFG() {
        }
    }

    class NET_DVR_LOG extends SdkStructure {
        public NET_DVR_TIME strLogTime;
        public int dwMajorType;
        public int dwMinorType;
        public byte[] sPanelUser = new byte[16];
        public byte[] sNetUser = new byte[16];
        public byte[] sRemoteHostAddr = new byte[16];
        public int dwParaType;
        public int dwChannel;
        public int dwDiskNumber;
        public int dwAlarmInPort;
        public int dwAlarmOutPort;

        public NET_DVR_LOG() {
        }
    }

    class NET_DVR_LOG_V30 extends SdkStructure {
        public NET_DVR_TIME strLogTime;
        public int dwMajorType;
        public int dwMinorType;
        public byte[] sPanelUser = new byte[16];
        public byte[] sNetUser = new byte[16];
        public NET_DVR_IPADDR struRemoteHostAddr;
        public int dwParaType;
        public int dwChannel;
        public int dwDiskNumber;
        public int dwAlarmInPort;
        public int dwAlarmOutPort;
        public int dwInfoLen;
        public byte[] sInfo = new byte[11840];

        public NET_DVR_LOG_V30() {
        }
    }

    class NET_DVR_MATRIXPARA extends SdkStructure {
        public short wDisplayLogo;
        public short wDisplayOsd;

        public NET_DVR_MATRIXPARA() {
        }
    }

    class NET_DVR_MATRIXPARA_V30 extends SdkStructure {
        public short[] wOrder = new short[32];
        public short wSwitchTime;
        public byte[] res = new byte[14];

        public NET_DVR_MATRIXPARA_V30() {
        }
    }

    class NET_DVR_MATRIX_COLUMN_ELEMENT extends SdkStructure {
        public int dwLocalDispChanNum;
        public int dwGlobalDispChanNum;
        public int dwRes;

        public NET_DVR_MATRIX_COLUMN_ELEMENT() {
        }
    }

    class NET_DVR_MATRIX_DECCHANINFO extends SdkStructure {
        public int dwEnable;
        public NET_DVR_MATRIX_DECINFO struDecChanInfo;

        public NET_DVR_MATRIX_DECCHANINFO() {
        }
    }

    class NET_DVR_MATRIX_DECINFO extends SdkStructure {
        public byte[] sDVRIP = new byte[16];
        public short wDVRPort;
        public byte byChannel;
        public byte byTransProtocol;
        public byte byTransMode;
        public byte[] byRes = new byte[3];
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];

        public NET_DVR_MATRIX_DECINFO() {
        }
    }

    class NET_DVR_MATRIX_DEC_CHAN_INFO extends SdkStructure {
        public int dwSize;
        public NET_DVR_MATRIX_DECINFO struDecChanInfo;
        public int dwDecState;
        public NET_DVR_TIME StartTime;
        public NET_DVR_TIME StopTime;
        public byte[] sFileName = new byte[128];

        public NET_DVR_MATRIX_DEC_CHAN_INFO() {
        }
    }

    class NET_DVR_MATRIX_DEC_CHAN_STATUS extends SdkStructure {
        public int dwSize;
        public int dwIsLinked;
        public int dwStreamCpRate;
        public byte[] cRes = new byte[64];

        public NET_DVR_MATRIX_DEC_CHAN_STATUS() {
        }
    }

    class NET_DVR_MATRIX_DEC_REMOTE_PLAY extends SdkStructure {
        public int dwSize;
        public byte[] sDVRIP = new byte[16];
        public short wDVRPort;
        public byte byChannel;
        public byte byReserve;
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public int dwPlayMode;
        public NET_DVR_TIME StartTime;
        public NET_DVR_TIME StopTime;
        public byte[] sFileName = new byte[128];

        public NET_DVR_MATRIX_DEC_REMOTE_PLAY() {
        }
    }

    class NET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL extends SdkStructure {
        public int dwSize;
        public int dwPlayCmd;
        public int dwCmdParam;

        public NET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL() {
        }
    }

    class NET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS extends SdkStructure {
        public int dwSize;
        public int dwCurMediaFileLen;
        public int dwCurMediaFilePosition;
        public int dwCurMediaFileDuration;
        public int dwCurPlayTime;
        public int dwCurMediaFIleFrames;
        public int dwCurDataType;
        public byte[] res = new byte[72];

        public NET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS() {
        }
    }

    class NET_DVR_MATRIX_DYNAMIC_DEC extends SdkStructure {
        public int dwSize;
        public NET_DVR_MATRIX_DECINFO struDecChanInfo;

        public NET_DVR_MATRIX_DYNAMIC_DEC() {
        }
    }

    class NET_DVR_MATRIX_GLOBAL_COLUMN_ELEMENT extends SdkStructure {
        public int dwConflictTag;
        public int dwConflictGloDispChan;
        public NET_DVR_MATRIX_COLUMN_ELEMENT struColumnInfo;

        public NET_DVR_MATRIX_GLOBAL_COLUMN_ELEMENT() {
        }
    }

    class NET_DVR_MATRIX_LOCAL_HOST_INFO extends SdkStructure {
        public int dwSize;
        public int dwLocalHostProperty;
        public int dwIsIsolated;
        public int dwLocalMatrixHostPort;
        public byte[] byLocalMatrixHostUsrName = new byte[32];
        public byte[] byLocalMatrixHostPasswd = new byte[16];
        public int dwLocalMatrixCtrlMedia;
        public byte[] sMatrixCenterIP = new byte[16];
        public int dwMatrixCenterPort;
        public byte[] byMatrixCenterUsrName = new byte[32];
        public byte[] byMatrixCenterPasswd = new byte[16];

        public NET_DVR_MATRIX_LOCAL_HOST_INFO() {
        }
    }

    class NET_DVR_MATRIX_LOOP_DECINFO extends SdkStructure {
        public int dwSize;
        public int dwPoolTime;
        public NET_DVR_MATRIX_DECCHANINFO[] struchanConInfo = new NET_DVR_MATRIX_DECCHANINFO[16];

        public NET_DVR_MATRIX_LOOP_DECINFO() {
        }
    }

    class NET_DVR_MATRIX_LOOP_PLAY_SET extends SdkStructure {
        public int dwSize;
        public int dwLocalDispChanNum;
        public int dwGlobalDispChanNum;
        public int dwCycTimeInterval;

        public NET_DVR_MATRIX_LOOP_PLAY_SET() {
        }
    }

    class NET_DVR_MATRIX_PASSIVEMODE extends SdkStructure {
        public short wTransProtol;
        public short wPassivePort;
        public byte[] sMcastIP = new byte[16];
        public byte[] res = new byte[8];

        public NET_DVR_MATRIX_PASSIVEMODE() {
        }
    }

    class NET_DVR_MATRIX_PREVIEW_DISP_CHAN extends SdkStructure {
        public int dwSize;
        public int dwGlobalDispChanNum;
        public int dwLocalDispChanNum;

        public NET_DVR_MATRIX_PREVIEW_DISP_CHAN() {
        }
    }

    class NET_DVR_MATRIX_ROW_COLUMN_LINK extends SdkStructure {
        public int dwSize;
        public int dwRowNum;
        public byte[] sSurvChanName = new byte[128];
        public int dwSurvNum;
        public int dwGlobalDispChanNum;
        public int dwLocalDispChanNum;
        public int dwTimeSel;
        public NET_DVR_TIME StartTime;
        public NET_DVR_TIME StopTime;
        public byte[] sFileName = new byte[128];

        public NET_DVR_MATRIX_ROW_COLUMN_LINK() {
        }
    }

    class NET_DVR_MATRIX_ROW_ELEMENT extends SdkStructure {
        public byte[] sSurvChanName = new byte[128];
        public int dwRowNum;
        public NET_DVR_MATRIX_DECINFO struDecChanInfo;

        public NET_DVR_MATRIX_ROW_ELEMENT() {
        }
    }

    class NET_DVR_MATRIX_ROW_INDEX extends SdkStructure {
        public byte[] sSurvChanName = new byte[128];
        public int dwRowNum;

        public NET_DVR_MATRIX_ROW_INDEX() {
        }
    }

    class NET_DVR_MATRIX_TRAN_CHAN_CONFIG extends SdkStructure {
        public int dwSize;
        public byte by232IsDualChan;
        public byte by485IsDualChan;
        public byte[] res = new byte[2];
        public NET_DVR_MATRIX_TRAN_CHAN_INFO[] struTranInfo = new NET_DVR_MATRIX_TRAN_CHAN_INFO[64];

        public NET_DVR_MATRIX_TRAN_CHAN_CONFIG() {
        }
    }

    class NET_DVR_MATRIX_TRAN_CHAN_INFO extends SdkStructure {
        public byte byTranChanEnable;
        public byte byLocalSerialDevice;
        public byte byRemoteSerialDevice;
        public byte res1;
        public byte[] sRemoteDevIP = new byte[16];
        public short wRemoteDevPort;
        public byte[] res2 = new byte[2];
        public TTY_CONFIG RemoteSerialDevCfg;

        public NET_DVR_MATRIX_TRAN_CHAN_INFO() {
        }
    }

    class NET_DVR_MOTION extends SdkStructure {
        byte[][] byMotionScope = new byte[18][22];
        byte byMotionSensitive;
        byte byEnableHandleMotion;
        byte[] reservedData = new byte[2];
        NET_DVR_HANDLEEXCEPTION strMotionHandleType;
        byte[] byRelRecordChan = new byte[16];

        public NET_DVR_MOTION() {
        }
    }

    class NET_DVR_MOTION_V30 extends SdkStructure {
        public byte96[] byMotionScope = new byte96[64];
        public byte byMotionSensitive;
        public byte byEnableHandleMotion;
        public byte byPrecision;
        public byte reservedData;
        public NET_DVR_HANDLEEXCEPTION_V30 struMotionHandleType;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmTime = new NET_DVR_SCHEDTIMEWEEK[7];
        public byte[] byRelRecordChan = new byte[64];

        public NET_DVR_MOTION_V30() {
        }
    }

    class NET_DVR_NETAPPCFG extends SdkStructure {
        public int dwSize;
        public byte[] sDNSIp = new byte[16];
        public NET_DVR_NTPPARA struNtpClientParam;
        public NET_DVR_DDNSPARA struDDNSClientParam;
        public byte[] res = new byte[464];

        public NET_DVR_NETAPPCFG() {
        }
    }

    class NET_DVR_NETCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_ETHERNET[] struEtherNet = new NET_DVR_ETHERNET[2];
        public byte[] sManageHostIP = new byte[16];
        public short wManageHostPort;
        public byte[] sIPServerIP = new byte[16];
        public byte[] sMultiCastIP = new byte[16];
        public byte[] sGatewayIP = new byte[16];
        public byte[] sNFSIP = new byte[16];
        public byte[] sNFSDirectory = new byte[128];
        public int dwPPPOE;
        public byte[] sPPPoEUser = new byte[32];
        public byte[] sPPPoEPassword = new byte[16];
        public byte[] sPPPoEIP = new byte[16];

        public NET_DVR_NETCFG() {
        }
    }

    class NET_DVR_NETCFG_OTHER extends SdkStructure {
        public int dwSize;
        public byte[] sFirstDNSIP = new byte[16];
        public byte[] sSecondDNSIP = new byte[16];
        public byte[] sRes = new byte[32];

        public NET_DVR_NETCFG_OTHER() {
        }
    }

    class NET_DVR_NETCFG_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_ETHERNET_V30[] struEtherNet = new NET_DVR_ETHERNET_V30[2];
        public NET_DVR_IPADDR[] struRes1 = new NET_DVR_IPADDR[2];
        public NET_DVR_IPADDR struAlarmHostIpAddr;
        public short[] wRes2 = new short[2];
        public short wAlarmHostIpPort;
        public byte byUseDhcp;
        public byte byRes3;
        public NET_DVR_IPADDR struDnsServer1IpAddr;
        public NET_DVR_IPADDR struDnsServer2IpAddr;
        public byte[] byIpResolver = new byte[64];
        public short wIpResolverPort;
        public short wHttpPortNo;
        public NET_DVR_IPADDR struMulticastIpAddr;
        public NET_DVR_IPADDR struGatewayIpAddr;
        public NET_DVR_PPPOECFG struPPPoE;
        public byte[] byRes = new byte[64];

        public NET_DVR_NETCFG_V30() {
        }

        public String toString() {
            return "NET_DVR_NETCFG_V30.dwSize: " + this.dwSize + "\n" + "NET_DVR_NETCFG_V30.struEtherNet[0]: \n" + this.struEtherNet[0] + "\n" + "NET_DVR_NETCFG_V30.struAlarmHostIpAddr: \n" + this.struAlarmHostIpAddr + "\n" + "NET_DVR_NETCFG_V30.wAlarmHostIpPort: " + this.wAlarmHostIpPort + "\n" + "NET_DVR_NETCFG_V30.wHttpPortNo: " + this.wHttpPortNo + "\n" + "NET_DVR_NETCFG_V30.struGatewayIpAddr: \n" + this.struGatewayIpAddr + "\n";
        }
    }

    class NET_DVR_NFSCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_SINGLE_NFS[] struNfsDiskParam = new NET_DVR_SINGLE_NFS[8];

        public NET_DVR_NFSCFG() {
        }
    }

    class NET_DVR_NTPPARA extends SdkStructure {
        public byte[] sNTPServer = new byte[64];
        public short wInterval;
        public byte byEnableNTP;
        public byte cTimeDifferenceH;
        public byte cTimeDifferenceM;
        public byte res1;
        public short wNtpPort;
        public byte[] res2 = new byte[8];

        public NET_DVR_NTPPARA() {
        }
    }

    class NET_DVR_PDC_ALRAM_INFO extends SdkStructure {
        public int dwSize;
        public byte byMode;
        public byte byChannel;
        public byte bySmart;
        public byte byRes1;
        public NET_VCA_DEV_INFO struDevInfo = new NET_VCA_DEV_INFO();
        public UNION_PDC_STATPARAM uStatModeParam = new UNION_PDC_STATPARAM();
        public int dwLeaveNum;
        public int dwEnterNum;
        public byte byBrokenNetHttp;
        public byte byRes3;
        public short wDevInfoIvmsChannelEx;
        public int dwPassingNum;
        public byte[] byRes2 = new byte[32];

        public NET_DVR_PDC_ALRAM_INFO() {
        }

        public void read() {
            super.read();
            switch (this.byMode) {
                case 0:
                    this.uStatModeParam.setType(NET_DVR_STATFRAME.class);
                    break;
                case 1:
                    this.uStatModeParam.setType(NET_DVR_STATTIME.class);
            }

            this.uStatModeParam.read();
        }

        public void write() {
            super.write();
            this.uStatModeParam.write();
        }
    }

    class NET_DVR_PICCFG extends SdkStructure {
        public int dwSize;
        public byte[] sChanName = new byte[32];
        public int dwVideoFormat;
        public byte byBrightness;
        public byte byContrast;
        public byte bySaturation;
        public byte byHue;
        public int dwShowChanName;
        public short wShowNameTopLeftX;
        public short wShowNameTopLeftY;
        public NET_DVR_VILOST struVILost;
        public NET_DVR_MOTION struMotion;
        public NET_DVR_HIDEALARM struHideAlarm;
        public int dwEnableHide;
        public short wHideAreaTopLeftX;
        public short wHideAreaTopLeftY;
        public short wHideAreaWidth;
        public short wHideAreaHeight;
        public int dwShowOsd;
        public short wOSDTopLeftX;
        public short wOSDTopLeftY;
        public byte byOSDType;
        byte byDispWeek;
        byte byOSDAttrib;
        public byte reservedData2;

        public NET_DVR_PICCFG() {
        }
    }

    class NET_DVR_PICCFG_EX extends SdkStructure {
        public int dwSize;
        public byte[] sChanName = new byte[32];
        public int dwVideoFormat;
        public byte byBrightness;
        public byte byContrast;
        public byte bySaturation;
        public byte byHue;
        public int dwShowChanName;
        public short wShowNameTopLeftX;
        public short wShowNameTopLeftY;
        public NET_DVR_VILOST struVILost;
        public NET_DVR_MOTION struMotion;
        public NET_DVR_HIDEALARM struHideAlarm;
        public int dwEnableHide;
        public NET_DVR_SHELTER[] struShelter = new NET_DVR_SHELTER[4];
        public int dwShowOsd;
        public short wOSDTopLeftX;
        public short wOSDTopLeftY;
        public byte byOSDType;
        public byte byDispWeek;
        public byte byOSDAttrib;
        public byte byHourOsdType;

        public NET_DVR_PICCFG_EX() {
        }
    }

    class NET_DVR_PICCFG_V30 extends SdkStructure {
        public int dwSize;
        public byte[] sChanName = new byte[32];
        public int dwVideoFormat;
        public NET_DVR_VICOLOR struViColor;
        public int dwShowChanName;
        public short wShowNameTopLeftX;
        public short wShowNameTopLeftY;
        public NET_DVR_VILOST_V30 struVILost;
        public NET_DVR_VILOST_V30 struAULost;
        public NET_DVR_MOTION_V30 struMotion;
        public NET_DVR_HIDEALARM_V30 struHideAlarm;
        public int dwEnableHide;
        public NET_DVR_SHELTER[] struShelter = new NET_DVR_SHELTER[4];
        public int dwShowOsd;
        public short wOSDTopLeftX;
        public short wOSDTopLeftY;
        public byte byOSDType;
        public byte byDispWeek;
        public byte byOSDAttrib;
        public byte byHourOSDType;
        public byte[] byRes = new byte[64];

        public NET_DVR_PICCFG_V30() {
        }
    }

    class NET_DVR_PLATE_INFO extends SdkStructure {
        public byte byPlateType;
        public byte byColor;
        public byte byBright;
        public byte byLicenseLen;
        public byte byEntireBelieve;
        public byte byRegion;
        public byte byCountry;
        public byte byArea;
        public byte byPlateSize;
        public byte[] byRes = new byte[15];
        public byte[] sPlateCategory = new byte[8];
        public int dwXmlLen;
        public Pointer pXmlBuf;
        public NET_VCA_RECT struPlateRect = new NET_VCA_RECT();
        public byte[] sLicense = new byte[16];
        public byte[] byBelieve = new byte[16];

        public NET_DVR_PLATE_INFO() {
        }
    }

    class NET_DVR_PLATE_RESULT extends SdkStructure {
        public int dwSize;
        public byte byResultType;
        public byte byChanIndex;
        public short wAlarmRecordID;
        public int dwRelativeTime;
        public byte[] byAbsTime = new byte[32];
        public int dwPicLen;
        public int dwPicPlateLen;
        public int dwVideoLen;
        public byte byTrafficLight;
        public byte byPicNum;
        public byte byDriveChan;
        public byte byVehicleType;
        public int dwBinPicLen;
        public int dwCarPicLen;
        public int dwFarCarPicLen;
        public Pointer pBuffer3;
        public Pointer pBuffer4;
        public Pointer pBuffer5;
        public byte[] byRes3 = new byte[8];
        public NET_DVR_PLATE_INFO struPlateInfo;
        public NET_DVR_VEHICLE_INFO struVehicleInfo;
        public Pointer pBuffer1;
        public Pointer pBuffer2;

        public NET_DVR_PLATE_RESULT() {
        }
    }

    class NET_DVR_PLAYREMOTEFILE extends SdkStructure {
        public int dwSize;
        public byte[] sDecoderIP = new byte[16];
        public short wDecoderPort;
        public short wLoadMode;
        public byte[] byFile = new byte[100];

        public NET_DVR_PLAYREMOTEFILE() {
        }

        public static class mode_size extends Union {
            public byte[] byFile = new byte[100];

            public mode_size() {
            }

            public static class bytime extends SdkStructure {
                public int dwChannel;
                public byte[] sUserName = new byte[32];
                public byte[] sPassword = new byte[16];
                public NET_DVR_TIME struStartTime;
                public NET_DVR_TIME struStopTime;

                public bytime() {
                }
            }
        }
    }

    class NET_DVR_POINT_FRAME extends SdkStructure {
        public int xTop;
        public int yTop;
        public int xBottom;
        public int yBottom;
        public int bCounter;

        public NET_DVR_POINT_FRAME() {
        }
    }

    class NET_DVR_PORTCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_PORTINFO[] struTransPortInfo = new NET_DVR_PORTINFO[2];

        public NET_DVR_PORTCFG() {
        }
    }

    class NET_DVR_PORTINFO extends SdkStructure {
        public int dwEnableTransPort;
        public byte[] sDecoderIP = new byte[16];
        public short wDecoderPort;
        public short wDVRTransPort;
        public byte[] cReserve = new byte[4];

        public NET_DVR_PORTINFO() {
        }
    }

    class NET_DVR_PPPCFG extends SdkStructure {
        public byte[] sRemoteIP = new byte[16];
        public byte[] sLocalIP = new byte[16];
        public byte[] sLocalIPMask = new byte[16];
        public byte[] sUsername = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte byPPPMode;
        public byte byRedial;
        public byte byRedialMode;
        public byte byDataEncrypt;
        public int dwMTU;
        public byte[] sTelephoneNumber = new byte[32];

        public NET_DVR_PPPCFG() {
        }
    }

    class NET_DVR_PPPCFG_V30 extends SdkStructure {
        public NET_DVR_IPADDR struRemoteIP;
        public NET_DVR_IPADDR struLocalIP;
        public byte[] sLocalIPMask = new byte[16];
        public byte[] sUsername = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte byPPPMode;
        public byte byRedial;
        public byte byRedialMode;
        public byte byDataEncrypt;
        public int dwMTU;
        public byte[] sTelephoneNumber = new byte[32];

        public NET_DVR_PPPCFG_V30() {
        }
    }

    class NET_DVR_PPPOECFG extends SdkStructure {
        public int dwPPPoE;
        public byte[] sPPPoEUser = new byte[32];
        public byte[] sPPPoEPassword = new byte[16];
        public NET_DVR_IPADDR struPPPoEIP;

        public NET_DVR_PPPOECFG() {
        }
    }

    class NET_DVR_PREVIEWCFG extends SdkStructure {
        public int dwSize;
        public byte byPreviewNumber;
        public byte byEnableAudio;
        public short wSwitchTime;
        public byte[] bySwitchSeq = new byte[16];

        public NET_DVR_PREVIEWCFG() {
        }
    }

    class NET_DVR_PREVIEWCFG_V30 extends SdkStructure {
        public int dwSize;
        public byte byPreviewNumber;
        public byte byEnableAudio;
        public short wSwitchTime;
        public byte[][] bySwitchSeq = new byte[8][32];
        public byte[] byRes = new byte[24];

        public NET_DVR_PREVIEWCFG_V30() {
        }
    }

    class NET_DVR_PTZCFG extends SdkStructure {
        public int dwSize;
        public NET_DVR_PTZ_PROTOCOL[] struPtz = new NET_DVR_PTZ_PROTOCOL[200];
        public int dwPtzNum;
        public byte[] byRes = new byte[8];

        public NET_DVR_PTZCFG() {
        }
    }

    class NET_DVR_PTZPOS extends SdkStructure {
        public short wAction;
        public short wPanPos;
        public short wTiltPos;
        public short wZoomPos;

        public NET_DVR_PTZPOS() {
        }
    }

    class NET_DVR_PTZSCOPE extends SdkStructure {
        public short wPanPosMin;
        public short wPanPosMax;
        public short wTiltPosMin;
        public short wTiltPosMax;
        public short wZoomPosMin;
        public short wZoomPosMax;

        public NET_DVR_PTZSCOPE() {
        }
    }

    class NET_DVR_PTZ_PROTOCOL extends SdkStructure {
        public int dwType;
        public byte[] byDescribe = new byte[16];

        public NET_DVR_PTZ_PROTOCOL() {
        }
    }

    class NET_DVR_RECCOMPRESSIONCFG_EX extends SdkStructure {
        int dwSize;
        NET_DVR_COMPRESSION_INFO_EX[][] struRecTimePara = new NET_DVR_COMPRESSION_INFO_EX[7][4];

        public NET_DVR_RECCOMPRESSIONCFG_EX() {
        }
    }

    class NET_DVR_RECORD extends SdkStructure {
        public int dwSize;
        public int dwRecord;
        public NET_DVR_RECORDDAY[] struRecAllDay = new NET_DVR_RECORDDAY[7];
        public NET_DVR_RECORDSCHEDWEEK[] struRecordSched = new NET_DVR_RECORDSCHEDWEEK[7];
        public int dwRecordTime;
        public int dwPreRecordTime;

        public NET_DVR_RECORD() {
        }
    }

    class NET_DVR_RECORDDAY extends SdkStructure {
        public short wAllDayRecord;
        public byte byRecordType;
        public byte reservedData;

        public NET_DVR_RECORDDAY() {
        }
    }

    class NET_DVR_RECORDSCHED extends SdkStructure {
        public NET_DVR_SCHEDTIME struRecordTime = new NET_DVR_SCHEDTIME();
        public byte byRecordType;
        public byte[] reservedData = new byte[3];

        public NET_DVR_RECORDSCHED() {
        }
    }

    class NET_DVR_RECORDSCHEDWEEK extends SdkStructure {
        public NET_DVR_RECORDSCHED[] struRecordSched = new NET_DVR_RECORDSCHED[8];

        public NET_DVR_RECORDSCHEDWEEK() {
        }
    }

    class NET_DVR_RECORD_V30 extends SdkStructure {
        public int dwSize;
        public int dwRecord;
        public NET_DVR_RECORDDAY[] struRecAllDay = new NET_DVR_RECORDDAY[7];
        public NET_DVR_RECORDSCHEDWEEK[] struRecordSched = new NET_DVR_RECORDSCHEDWEEK[7];
        public int dwRecordTime;
        public int dwPreRecordTime;
        public int dwRecorderDuration;
        public byte byRedundancyRec;
        public byte byAudioRec;
        public byte[] byReserve = new byte[10];

        public NET_DVR_RECORD_V30() {
        }
    }

    class NET_DVR_RS232CFG extends SdkStructure {
        public int dwSize;
        public int dwBaudRate;
        public byte byDataBit;
        public byte byStopBit;
        public byte byParity;
        public byte byFlowcontrol;
        public int dwWorkMode;
        public NET_DVR_PPPCFG struPPPConfig;

        public NET_DVR_RS232CFG() {
        }
    }

    class NET_DVR_RS232CFG_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_SINGLE_RS232 struRs232;
        public byte[] byRes = new byte[84];
        public NET_DVR_PPPCFG_V30 struPPPConfig;

        public NET_DVR_RS232CFG_V30() {
        }
    }

    class NET_DVR_RTSPCFG extends SdkStructure {
        public int dwSize;
        public short wPort;
        public byte[] byReserve = new byte[54];

        public NET_DVR_RTSPCFG() {
        }
    }

    class NET_DVR_SCALECFG extends SdkStructure {
        public int dwSize;
        public int dwMajorScale;
        public int dwMinorScale;
        public int[] dwRes = new int[2];

        public NET_DVR_SCALECFG() {
        }
    }

    class NET_DVR_SCENE_INFO extends SdkStructure {
        public int dwSceneID;
        public byte[] bySceneName = new byte[32];
        public byte byDirection;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_PTZPOS struPtzPos;
        public byte[] byRes2 = new byte[64];

        public NET_DVR_SCENE_INFO() {
        }
    }

    class NET_DVR_SCHEDTIME extends SdkStructure {
        public byte byStartHour;
        public byte byStartMin;
        public byte byStopHour;
        public byte byStopMin;

        public NET_DVR_SCHEDTIME() {
        }
    }

    class NET_DVR_SCHEDTIMEWEEK extends SdkStructure {
        public NET_DVR_SCHEDTIME[] struAlarmTime = new NET_DVR_SCHEDTIME[8];

        public NET_DVR_SCHEDTIMEWEEK() {
        }
    }

    class NET_DVR_SDKABL extends SdkStructure {
        public int dwMaxLoginNum;
        public int dwMaxRealPlayNum;
        public int dwMaxPlayBackNum;
        public int dwMaxAlarmChanNum;
        public int dwMaxFormatNum;
        public int dwMaxFileSearchNum;
        public int dwMaxLogSearchNum;
        public int dwMaxSerialNum;
        public int dwMaxUpgradeNum;
        public int dwMaxVoiceComNum;
        public int dwMaxBroadCastNum;
        public int[] dwRes = new int[10];

        public NET_DVR_SDKABL() {
        }
    }

    class NET_DVR_SDKSTATE extends SdkStructure {
        public int dwTotalLoginNum;
        public int dwTotalRealPlayNum;
        public int dwTotalPlayBackNum;
        public int dwTotalAlarmChanNum;
        public int dwTotalFormatNum;
        public int dwTotalFileSearchNum;
        public int dwTotalLogSearchNum;
        public int dwTotalSerialNum;
        public int dwTotalUpgradeNum;
        public int dwTotalVoiceComNum;
        public int dwTotalBroadCastNum;
        public int[] dwRes = new int[10];

        public NET_DVR_SDKSTATE() {
        }
    }

    class NET_DVR_SENDER extends SdkStructure {
        public byte[] sName = new byte[32];
        public byte[] sAddress = new byte[48];

        public NET_DVR_SENDER() {
        }
    }

    class NET_DVR_SETUPALARM_PARAM extends SdkStructure {
        public int dwSize;
        public byte byLevel;
        public byte byAlarmInfoType;
        public byte byRetAlarmTypeV40;
        public byte byRetDevInfoVersion;
        public byte byRetVQDAlarmType;
        public byte byFaceAlarmDetection;
        public byte bySupport;
        public byte byBrokenNetHttp;
        public short wTaskNo;
        public byte byDeployType;
        public byte[] byRes1 = new byte[3];
        public byte byAlarmTypeURL;
        public byte byCustomCtrl;

        public NET_DVR_SETUPALARM_PARAM() {
        }
    }

    class NET_DVR_SHELTER extends SdkStructure {
        public short wHideAreaTopLeftX;
        public short wHideAreaTopLeftY;
        public short wHideAreaWidth;
        public short wHideAreaHeight;

        public NET_DVR_SHELTER() {
        }
    }

    class NET_DVR_SHOWSTRING extends SdkStructure {
        public int dwSize;
        public NET_DVR_SHOWSTRINGINFO[] struStringInfo = new NET_DVR_SHOWSTRINGINFO[4];

        public NET_DVR_SHOWSTRING() {
        }
    }

    class NET_DVR_SHOWSTRINGINFO extends SdkStructure {
        public short wShowString;
        public short wStringSize;
        public short wShowStringTopLeftX;
        public short wShowStringTopLeftY;
        public byte[] sString = new byte[44];

        public NET_DVR_SHOWSTRINGINFO() {
        }
    }

    class NET_DVR_SHOWSTRING_EX extends SdkStructure {
        public int dwSize;
        public NET_DVR_SHOWSTRINGINFO[] struStringInfo = new NET_DVR_SHOWSTRINGINFO[8];

        public NET_DVR_SHOWSTRING_EX() {
        }
    }

    class NET_DVR_SHOWSTRING_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_SHOWSTRINGINFO[] struStringInfo = new NET_DVR_SHOWSTRINGINFO[8];

        public NET_DVR_SHOWSTRING_V30() {
        }
    }

    class NET_DVR_SINGLE_HD extends SdkStructure {
        public int dwHDNo;
        public int dwCapacity;
        public int dwFreeSpace;
        public int dwHdStatus;
        public byte byHDAttr;
        public byte[] byRes1 = new byte[3];
        public int dwHdGroup;
        public byte[] byRes2 = new byte[120];

        public NET_DVR_SINGLE_HD() {
        }
    }

    class NET_DVR_SINGLE_HDGROUP extends SdkStructure {
        public int dwHDGroupNo;
        public byte[] byHDGroupChans = new byte[64];
        public byte[] byRes = new byte[8];

        public NET_DVR_SINGLE_HDGROUP() {
        }
    }

    class NET_DVR_SINGLE_NFS extends SdkStructure {
        public byte[] sNfsHostIPAddr = new byte[16];
        public byte[] sNfsDirectory = new byte[128];

        public NET_DVR_SINGLE_NFS() {
        }
    }

    class NET_DVR_SINGLE_RS232 extends SdkStructure {
        public int dwBaudRate;
        public byte byDataBit;
        public byte byStopBit;
        public byte byParity;
        public byte byFlowcontrol;
        public int dwWorkMode;

        public NET_DVR_SINGLE_RS232() {
        }
    }

    class NET_DVR_SNAPCFG extends SdkStructure {
        public int dwSize;
        public byte byRelatedDriveWay;
        public byte bySnapTimes;
        public short wSnapWaitTime;
        public short[] wIntervalTime = new short[4];
        public int dwSnapVehicleNum;
        public NET_DVR_JPEGPARA struJpegPara;
        public byte[] byRes2 = new byte[16];

        public NET_DVR_SNAPCFG() {
        }
    }

    class NET_DVR_STATFRAME extends SdkStructure {
        public int dwRelativeTime;
        public int dwAbsTime;
        public byte[] byRes = new byte[92];

        public NET_DVR_STATFRAME() {
        }
    }

    class NET_DVR_STATTIME extends SdkStructure {
        public NET_DVR_TIME tmStart;
        public NET_DVR_TIME tmEnd;
        public byte[] byRes = new byte[92];

        public NET_DVR_STATTIME() {
        }
    }

    class NET_DVR_STRING_POINTER extends SdkStructure {
        public byte[] byString = new byte[2048];

        public NET_DVR_STRING_POINTER() {
        }
    }

    class NET_DVR_TFS_ALARM extends SdkStructure {
        public int dwSize;
        public int dwRelativeTime;
        public int dwAbsTime;
        public int dwIllegalType;
        public int dwIllegalDuration;
        public byte[] byMonitoringSiteID = new byte[48];
        public byte[] byDeviceID = new byte[48];
        public NET_VCA_DEV_INFO struDevInfo = new NET_VCA_DEV_INFO();
        public NET_DVR_SCENE_INFO struSceneInfo = new NET_DVR_SCENE_INFO();
        public NET_DVR_TIME_EX struBeginRecTime = new NET_DVR_TIME_EX();
        public NET_DVR_TIME_EX struEndRecTime = new NET_DVR_TIME_EX();
        public NET_DVR_AID_INFO struAIDInfo = new NET_DVR_AID_INFO();
        public NET_DVR_PLATE_INFO struPlateInfo = new NET_DVR_PLATE_INFO();
        public NET_DVR_VEHICLE_INFO struVehicleInfo = new NET_DVR_VEHICLE_INFO();
        public int dwPicNum;
        public NET_ITS_PICTURE_INFO[] struPicInfo = new NET_ITS_PICTURE_INFO[8];
        public byte bySpecificVehicleType;
        public byte byLaneNo;
        public byte[] byRes1 = new byte[2];
        public NET_DVR_TIME_V30 struTime = new NET_DVR_TIME_V30();
        public int dwSerialNo;
        public byte byVehicleAttribute;
        public byte byPilotSafebelt;
        public byte byCopilotSafebelt;
        public byte byPilotSunVisor;
        public byte byCopilotSunVisor;
        public byte byPilotCall;
        public byte[] byRes2 = new byte[2];
        public byte[] byIllegalCode = new byte[32];
        public short wCountry;
        public byte byRegion;
        public byte byCrossLine;
        public byte[] byParkingSerialNO = new byte[16];
        public byte byCrossSpaces;
        public byte byAngledParking;
        public byte byAlarmValidity;
        public byte[] byRes = new byte[45];

        public NET_DVR_TFS_ALARM() {
        }
    }

    class NET_DVR_GROUP_CFG extends SdkStructure {
        public int dwSize;
        public byte byEnable;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_VALID_PERIOD_CFG struValidPeriodCfg = new NET_DVR_VALID_PERIOD_CFG();
        public byte[] byGroupName = new byte[32];
        public byte[] byRes2 = new byte[3];

        public NET_DVR_GROUP_CFG() {
        }
    }

    class NET_DVR_MULTI_CARD_CFG extends SdkStructure {
        public int dwSize;
        public byte byEnable;
        public byte bySwipeIntervalTimeout;
        public byte[] byRes1 = new byte[2];
        public NET_DVR_MULTI_CARD_GROUP_CFG[] struGroupCfg = new NET_DVR_MULTI_CARD_GROUP_CFG[4];
        public byte[] byRes2 = new byte[32];

        public NET_DVR_MULTI_CARD_CFG() {
        }
    }

    class NET_DVR_MULTI_CARD_GROUP_CFG extends SdkStructure {
        public byte byEnable;
        public byte byEnableOfflineVerifyMode;
        public byte[] byRes1 = new byte[2];
        public int dwTemplateNo;
        public NET_DVR_GROUP_COMBINATION_INFO[] struGroupCombination = new NET_DVR_GROUP_COMBINATION_INFO[8];

        public NET_DVR_MULTI_CARD_GROUP_CFG() {
        }
    }

    class NET_DVR_GROUP_COMBINATION_INFO extends SdkStructure {
        public byte byEnable;
        public byte byMemberNum;
        public byte bySequenceNo;
        public byte byRes;
        public int dwGroupNo;

        public NET_DVR_GROUP_COMBINATION_INFO() {
        }
    }


    class NET_DVR_TIME extends SdkStructure {
        public int dwYear;
        public int dwMonth;
        public int dwDay;
        public int dwHour;
        public int dwMinute;
        public int dwSecond;

        public NET_DVR_TIME() {
        }

        public String toString() {
            return "NET_DVR_TIME.dwYear: " + this.dwYear + "\n" + "NET_DVR_TIME.dwMonth: \n" + this.dwMonth + "\n" + "NET_DVR_TIME.dwDay: \n" + this.dwDay + "\n" + "NET_DVR_TIME.dwHour: \n" + this.dwHour + "\n" + "NET_DVR_TIME.dwMinute: \n" + this.dwMinute + "\n" + "NET_DVR_TIME.dwSecond: \n" + this.dwSecond;
        }

        public String toStringTime() {
            return String.format("%02d/%02d/%02d%02d:%02d:%02d", this.dwYear, this.dwMonth, this.dwDay, this.dwHour, this.dwMinute, this.dwSecond);
        }

        public String toStringTitle() {
            return String.format("Time%02d%02d%02d%02d%02d%02d", this.dwYear, this.dwMonth, this.dwDay, this.dwHour, this.dwMinute, this.dwSecond);
        }
    }

    class NET_DVR_PLAYCOND extends SdkStructure {
        public int dwChannel;
        public NET_DVR_TIME struStartTime;
        public NET_DVR_TIME struStopTime;
        public byte byDrawFrame;
        public byte byStreamType;
        public byte[] byStreamID = new byte[32];
        public byte byCourseFile;
        public byte[] byRes = new byte[29];

        public NET_DVR_PLAYCOND() {
        }
    }

    class NET_DVR_STREAM_INFO extends SdkStructure {
        public int dwSize;
        public byte[] byID = new byte[32];
        public int dwChannel;
        public byte[] byRes = new byte[32];

        public NET_DVR_STREAM_INFO() {
        }
    }

    class NET_DVR_STREAM_SRC_INFO_V40 extends SdkStructure {
        public int dwSize;
        public byte byGetStreamType;
        public byte[] byRes1 = new byte[3];
        //public NET_DVR_STREAM_TYPE_V40_UNION uGetStream;
        public byte[] byRes = new byte[512];

        public NET_DVR_STREAM_SRC_INFO_V40() {
        }
    }

    class NET_DVR_TIMEPOINT extends SdkStructure {
        public int dwMonth;
        public int dwWeekNo;
        public int dwWeekDate;
        public int dwHour;
        public int dwMin;

        public NET_DVR_TIMEPOINT() {
        }
    }

    class NET_DVR_TIME_EX extends SdkStructure {
        public short wYear;
        public byte byMonth;
        public byte byDay;
        public byte byHour;
        public byte byMinute;
        public byte bySecond;
        public byte byRes;

        public NET_DVR_TIME_EX() {
        }
    }

    class NET_DVR_TIME_V30 extends SdkStructure {
        public short wYear;
        public byte byMonth;
        public byte byDay;
        public byte byHour;
        public byte byMinute;
        public byte bySecond;
        public byte byRes;
        public short wMilliSec;
        public byte[] byRes1 = new byte[2];

        public NET_DVR_TIME_V30() {
        }
    }

    class NET_DVR_TPS_ALARM_V41 extends SdkStructure {
        public int dwSize;
        public int dwRelativeTime;
        public int dwAbsTime;
        public NET_VCA_DEV_INFO struDevInfo;
        public NET_DVR_TPS_INFO_V41 struTPSInfo;
        public byte[] byMonitoringSiteID = new byte[48];
        public byte[] byDeviceID = new byte[48];
        public int dwStartTime;
        public int dwStopTime;
        public byte[] byRes = new byte[24];

        public NET_DVR_TPS_ALARM_V41() {
        }
    }

    class NET_DVR_TPS_INFO_V41 extends SdkStructure {
        public int dwLanNum;
        public NET_DVR_LANE_PARAM_V41[] struLaneParam = new NET_DVR_LANE_PARAM_V41[8];
        public int dwSceneID;
        public byte[] byRes = new byte[28];

        public NET_DVR_TPS_INFO_V41() {
        }
    }

    class NET_DVR_TPS_LANE_PARAM extends SdkStructure {
        public byte byLane;
        public byte bySpeed;
        public byte[] byRes = new byte[2];
        public int dwLightVehicle;
        public int dwMidVehicle;
        public int dwHeavyVehicle;
        public int dwTimeHeadway;
        public int dwSpaceHeadway;
        public float fSpaceOccupyRation;
        public float fTimeOccupyRation;
        public byte[] byRes1 = new byte[16];

        public NET_DVR_TPS_LANE_PARAM() {
        }
    }

    class NET_DVR_TPS_STATISTICS_INFO extends SdkStructure {
        public int dwSize;
        public int dwChan;
        public NET_DVR_TPS_STATISTICS_PARAM struTPSStatisticsInfo;
        public byte[] byRes = new byte[128];

        public NET_DVR_TPS_STATISTICS_INFO() {
        }
    }

    class NET_DVR_TPS_STATISTICS_PARAM extends SdkStructure {
        public byte byStart;
        public byte byCMD;
        public byte[] byRes = new byte[2];
        public short wDeviceID;
        public short wDataLen;
        public byte byTotalLaneNum;
        public byte[] byRes1 = new byte[15];
        public NET_DVR_TIME_V30 struStartTime;
        public int dwSamplePeriod;
        public NET_DVR_TPS_LANE_PARAM[] struLaneParam = new NET_DVR_TPS_LANE_PARAM[8];

        public NET_DVR_TPS_STATISTICS_PARAM() {
        }
    }

    class NET_DVR_TRADEINFO extends SdkStructure {
        public short m_Year;
        public short m_Month;
        public short m_Day;
        public short m_Hour;
        public short m_Minute;
        public short m_Second;
        public byte[] DeviceName = new byte[24];
        public int dwChannelNumer;
        public byte[] CardNumber = new byte[32];
        public byte[] cTradeType = new byte[12];
        public int dwCash;

        public NET_DVR_TRADEINFO() {
        }
    }

    class NET_DVR_USER extends SdkStructure {
        public int dwSize;
        public NET_DVR_USER_INFO[] struUser = new NET_DVR_USER_INFO[16];

        public NET_DVR_USER() {
        }
    }

    class NET_DVR_USER_EX extends SdkStructure {
        public int dwSize;
        public NET_DVR_USER_INFO_EX[] struUser = new NET_DVR_USER_INFO_EX[16];

        public NET_DVR_USER_EX() {
        }
    }

    class NET_DVR_USER_INFO extends SdkStructure {
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public int[] dwLocalRight = new int[32];
        public int[] dwRemoteRight = new int[32];
        public byte[] sUserIP = new byte[16];
        public byte[] byMACAddr = new byte[6];

        public NET_DVR_USER_INFO() {
        }
    }

    class NET_DVR_USER_INFO_EX extends SdkStructure {
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public int[] dwLocalRight = new int[32];
        public int dwLocalPlaybackRight;
        public int[] dwRemoteRight = new int[32];
        public int dwNetPreviewRight;
        public int dwNetPlaybackRight;
        public byte[] sUserIP = new byte[16];
        public byte[] byMACAddr = new byte[6];

        public NET_DVR_USER_INFO_EX() {
        }
    }

    class NET_DVR_USER_INFO_V30 extends SdkStructure {
        public byte[] sUserName = new byte[32];
        public byte[] sPassword = new byte[16];
        public byte[] byLocalRight = new byte[32];
        public byte[] byRemoteRight = new byte[32];
        public byte[] byNetPreviewRight = new byte[64];
        public byte[] byLocalPlaybackRight = new byte[64];
        public byte[] byNetPlaybackRight = new byte[64];
        public byte[] byLocalRecordRight = new byte[64];
        public byte[] byNetRecordRight = new byte[64];
        public byte[] byLocalPTZRight = new byte[64];
        public byte[] byNetPTZRight = new byte[64];
        public byte[] byLocalBackupRight = new byte[64];
        public NET_DVR_IPADDR struUserIP;
        public byte[] byMACAddr = new byte[6];
        public byte byPriority;
        public byte[] byRes = new byte[17];

        public NET_DVR_USER_INFO_V30() {
        }
    }

    class NET_DVR_USER_LOGIN_INFO extends SdkStructure {
        public byte[] sDeviceAddress = new byte[129];
        public byte byUseTransport;
        public short wPort;
        public byte[] sUserName = new byte[64];
        public byte[] sPassword = new byte[64];
        public FLoginResultCallBack cbLoginResult;
        public Pointer pUser;
        public boolean bUseAsynLogin;
        public byte[] byRes2 = new byte[128];

        public NET_DVR_USER_LOGIN_INFO() {
        }
    }

    class NET_DVR_USER_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_USER_INFO_V30[] struUser = new NET_DVR_USER_INFO_V30[32];

        public NET_DVR_USER_V30() {
        }
    }

    class NET_DVR_VALID_PERIOD_CFG extends SdkStructure {
        public byte byEnable;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_TIME_EX struBeginTime;
        public NET_DVR_TIME_EX struEndTime;
        public byte[] byRes2 = new byte[32];

        public NET_DVR_VALID_PERIOD_CFG() {
        }
    }

    class NET_DVR_VEHICLE_INFO extends SdkStructure {
        public int dwIndex;
        public byte byVehicleType;
        public byte byColorDepth;
        public byte byColor;
        public byte byRadarState;
        public short wSpeed;
        public short wLength;
        public byte byIllegalType;
        public byte byVehicleLogoRecog;
        public byte byVehicleSubLogoRecog;
        public byte byVehicleModel;
        public byte[] byCustomInfo = new byte[16];
        public short wVehicleLogoRecog;
        public byte byIsParking;
        public byte byRes;
        public int dwParkingTime;
        public byte[] byRes3 = new byte[8];

        public NET_DVR_VEHICLE_INFO() {
        }
    }

    class NET_DVR_VGAPARA extends SdkStructure {
        public short wResolution;
        public short wFreq;
        public int dwBrightness;

        public NET_DVR_VGAPARA() {
        }
    }

    class NET_DVR_VICOLOR extends SdkStructure {
        public NET_DVR_COLOR[] struColor = new NET_DVR_COLOR[8];
        public NET_DVR_SCHEDTIME[] struHandleTime = new NET_DVR_SCHEDTIME[8];

        public NET_DVR_VICOLOR() {
        }
    }

    class NET_DVR_VIDEOOUT extends SdkStructure {
        public int dwSize;
        public NET_DVR_VOOUT[] struVOOut = new NET_DVR_VOOUT[2];
        public NET_DVR_VGAPARA[] struVGAPara = new NET_DVR_VGAPARA[1];
        public NET_DVR_MATRIXPARA struMatrixPara;

        public NET_DVR_VIDEOOUT() {
        }
    }

    class NET_DVR_VIDEOOUT_V30 extends SdkStructure {
        public int dwSize;
        public NET_DVR_VOOUT[] struVOOut = new NET_DVR_VOOUT[4];
        public NET_DVR_VGAPARA[] struVGAPara = new NET_DVR_VGAPARA[4];
        public NET_DVR_MATRIXPARA_V30[] struMatrixPara = new NET_DVR_MATRIXPARA_V30[16];
        public byte[] byRes = new byte[16];

        public NET_DVR_VIDEOOUT_V30() {
        }
    }

    class NET_DVR_VILOST extends SdkStructure {
        byte byEnableHandleVILost;
        NET_DVR_HANDLEEXCEPTION strVILostHandleType;

        public NET_DVR_VILOST() {
        }
    }

    class NET_DVR_VILOST_V30 extends SdkStructure {
        public byte byEnableHandleVILost;
        public NET_DVR_HANDLEEXCEPTION_V30 strVILostHandleType;
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmTime = new NET_DVR_SCHEDTIMEWEEK[7];

        public NET_DVR_VILOST_V30() {
        }
    }

    class NET_DVR_VOOUT extends SdkStructure {
        public byte byVideoFormat;
        public byte byMenuAlphaValue;
        public short wScreenSaveTime;
        public short wVOffset;
        public short wBrightness;
        public byte byStartMode;
        public byte byEnableScaler;

        public NET_DVR_VOOUT() {
        }
    }

    class NET_DVR_WORKSTATE extends SdkStructure {
        public int dwDeviceStatic;
        public NET_DVR_DISKSTATE[] struHardDiskStatic = new NET_DVR_DISKSTATE[16];
        public NET_DVR_CHANNELSTATE[] struChanStatic = new NET_DVR_CHANNELSTATE[16];
        public byte[] byAlarmInStatic = new byte[16];
        public byte[] byAlarmOutStatic = new byte[4];
        public int dwLocalDisplay;

        public NET_DVR_WORKSTATE() {
        }
    }

    class NET_DVR_WORKSTATE_V30 extends SdkStructure {
        public int dwDeviceStatic;
        public NET_DVR_DISKSTATE[] struHardDiskStatic = new NET_DVR_DISKSTATE[33];
        public NET_DVR_CHANNELSTATE_V30[] struChanStatic = new NET_DVR_CHANNELSTATE_V30[64];
        public byte[] byAlarmInStatic = new byte[160];
        public byte[] byAlarmOutStatic = new byte[96];
        public int dwLocalDisplay;
        public byte[] byAudioChanStatus = new byte[2];
        public byte[] byRes = new byte[10];

        public NET_DVR_WORKSTATE_V30() {
        }
    }

    class NET_DVR_XML_CONFIG_INPUT extends SdkStructure {
        public int dwSize;
        public Pointer lpRequestUrl;
        public int dwRequestUrlLen;
        public Pointer lpInBuffer;
        public int dwInBufferSize;
        public int dwRecvTimeOut;
        public byte[] byRes = new byte[32];

        public NET_DVR_XML_CONFIG_INPUT() {
        }
    }

    class IN_STRING extends SdkStructure {
        public int dwSize;
        public byte[] strData = new byte[512];

        public IN_STRING() {
        }
    }

    class ERROR_STR extends SdkStructure {
        public int dwSize;
        public byte[] err = new byte[4];

        public ERROR_STR() {
        }
    }

    class NET_DVR_GETWORKSTATE_COND extends SdkStructure{
        public int dwSize ;  //结构体长度
        public byte byFindHardByCond; /*0-查找全部磁盘(但一次最多只能查找33个)，此时dwFindHardStatusNum无效*/
        public byte byFindChanByCond ;  /*0-查找全部通道，此时dwFindChanNum无效*/
        public byte[] byRes1 = new byte[2] ;//保留
        public int[] dwFindHardStatus = new int[33] ; /*要查找的硬盘号，按值表示，该值采用顺序排列， 遇到0xffffffff则认为后续无效 */
        public int[] dwFindChanNo = new int[512] ; /*要查找的通道号，按值表示，该值采用顺序排列， 遇到0xffffffff则认为后续无效 */
        public byte[] byRes = new byte[64] ; //保留
        public NET_DVR_GETWORKSTATE_COND() {
        }
    }

    class NET_DVR_WORKSTATE_V40 extends SdkStructure{
        public int dwSize ;            //结构体大小
        public int dwDeviceStatic;      //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉
        public NET_DVR_DISKSTATE[]  struHardDiskStatic = new NET_DVR_DISKSTATE[MAX_DISKNUM_V30];   //硬盘状态,一次最多只能获取33个硬盘信息
        public NET_DVR_CHANNELSTATE_V30[] struChanStatic = new NET_DVR_CHANNELSTATE_V30[512];//通道的状态，从前往后顺序排列
        public int[] dwHasAlarmInStatic = new int[4128]; //有报警的报警输入口，按值表示，按下标值顺序排列，值为0xffffffff时当前及后续值无效
        public int[] dwHasAlarmOutStatic = new int[4128]; //有报警输出的报警输出口，按值表示，按下标值顺序排列，值为0xffffffff时当前及后续值无效
        public int dwLocalDisplay;            //本地显示状态,0-正常,1-不正常
        public byte[] byAudioInChanStatus = new byte[2];        //按位表示语音通道的状态 0-未使用，1-使用中，第0位表示第1个语音通道
        public byte[] byRes1 = new byte[2];
        public float fHumidity;    //传感器获知的湿度,范围:0.0 ~100.0
        public float fTemperature;    //传感器获知的温度，范围：-20.0 ~ 90.0
        public byte[] byRes = new byte[116];                 //保留
        public NET_DVR_WORKSTATE_V40() {
        }
    }

    class OUT_STRING extends SdkStructure {
        public int dwSize;
        public byte[] strData = new byte[1024 * 1024];

        public OUT_STRING() {
        }
    }

    class NET_VCA_BEHAVIOR_ABILITY extends SdkStructure {
        public int dwSize;
        public int dwAbilityType;
        public byte byMaxRuleNum;
        public byte byMaxTargetNum;
        public byte bySupport;
        public byte byVCAType;
        public byte[] byRes = new byte[5];
        public int dwAbilityTypeEx;

        public NET_VCA_BEHAVIOR_ABILITY() {
        }
    }

    class NET_VCA_CHAN_IN_PARAM extends SdkStructure {
        public byte byVCAType;
        public byte byMode;
        public byte[] byRes = new byte[2];

        public NET_VCA_CHAN_IN_PARAM() {
        }
    }

    class NET_DVR_XML_CONFIG_OUTPUT extends SdkStructure {
        public int dwSize;
        public Pointer lpOutBuffer;
        public int dwOutBufferSize;
        public int dwReturnedXMLSize;
        public Pointer lpStatusBuffer;
        public int dwStatusSize;
        public byte[] byRes = new byte[32];

        public NET_DVR_XML_CONFIG_OUTPUT() {
        }
    }

    class NET_DVR_ZONEANDDST extends SdkStructure {
        public int dwSize;
        public byte[] byRes1 = new byte[16];
        public int dwEnableDST;
        public byte byDSTBias;
        public byte[] byRes2 = new byte[3];
        public NET_DVR_TIMEPOINT struBeginPoint;
        public NET_DVR_TIMEPOINT struEndPoint;

        public NET_DVR_ZONEANDDST() {
        }
    }

    class NET_ITS_PARK_VEHICLE extends SdkStructure {
        public int dwSize;
        public byte byGroupNum;
        public byte byPicNo;
        public byte byLocationNum;
        public byte byParkError;
        public byte[] byParkingNo = new byte[16];
        public byte byLocationStatus;
        public byte bylogicalLaneNum;
        public short wUpLoadType;
        public byte[] byRes1 = new byte[4];
        public int dwChanIndex;
        public NET_DVR_PLATE_INFO struPlateInfo;
        public NET_DVR_VEHICLE_INFO struVehicleInfo;
        public byte[] byMonitoringSiteID = new byte[48];
        public byte[] byDeviceID = new byte[48];
        public int dwPicNum;
        public NET_ITS_PICTURE_INFO[] struPicInfo = new NET_ITS_PICTURE_INFO[2];
        public byte[] byRes2 = new byte[256];

        public NET_ITS_PARK_VEHICLE() {
        }
    }

    class NET_ITS_PICTURE_INFO extends SdkStructure {
        public int dwDataLen;
        public byte byType;
        public byte byDataType;
        public byte byCloseUpType;
        public byte byPicRecogMode;
        public int dwRedLightTime;
        public byte[] byAbsTime = new byte[32];
        public NET_VCA_RECT struPlateRect = new NET_VCA_RECT();
        public NET_VCA_RECT struPlateRecgRect = new NET_VCA_RECT();
        public Pointer pBuffer;
        public int dwUTCTime;
        public byte byCompatibleAblity;
        public byte byTimeDiffFlag;
        public byte cTimeDifferenceH;
        public byte cTimeDifferenceM;
        public byte[] byRes2 = new byte[4];

        public NET_ITS_PICTURE_INFO() {
        }
    }

    class NET_ITS_PLATE_RESULT extends SdkStructure {
        public int dwSize;
        public int dwMatchNo;
        public byte byGroupNum;
        public byte byPicNo;
        public byte bySecondCam;
        public byte byFeaturePicNo;
        public byte byDriveChan;
        public byte byVehicleType;
        public byte byDetSceneID;
        public byte byVehicleAttribute;
        public short wIllegalType;
        public byte[] byIllegalSubType = new byte[8];
        public byte byPostPicNo;
        public byte byChanIndex;
        public short wSpeedLimit;
        public byte byChanIndexEx;
        public byte byRes2;
        public NET_DVR_PLATE_INFO struPlateInfo = new NET_DVR_PLATE_INFO();
        public NET_DVR_VEHICLE_INFO struVehicleInfo = new NET_DVR_VEHICLE_INFO();
        public byte[] byMonitoringSiteID = new byte[48];
        public byte[] byDeviceID = new byte[48];
        public byte byDir;
        public byte byDetectType;
        public byte byRelaLaneDirectionType;
        public byte byCarDirectionType;
        public int dwCustomIllegalType;
        public Pointer pIllegalInfoBuf;
        public byte byIllegalFromatType;
        public byte byPendant;
        public byte byDataAnalysis;
        public byte byYellowLabelCar;
        public byte byDangerousVehicles;
        public byte byPilotSafebelt;
        public byte byCopilotSafebelt;
        public byte byPilotSunVisor;
        public byte byCopilotSunVisor;
        public byte byPilotCall;
        public byte byBarrierGateCtrlType;
        public byte byAlarmDataType;
        public NET_DVR_TIME_V30 struSnapFirstPicTime = new NET_DVR_TIME_V30();
        public int dwIllegalTime;
        public int dwPicNum;
        public NET_ITS_PICTURE_INFO[] struPicInfo = new NET_ITS_PICTURE_INFO[6];

        public NET_ITS_PLATE_RESULT() {
        }
    }

    class NET_VCA_AREA extends SdkStructure {
        public NET_VCA_POLYGON struRegion;
        public byte[] byRes = new byte[8];

        public NET_VCA_AREA() {
        }
    }

    class NET_VCA_BLACKLIST_INFO extends SdkStructure {
        public int dwSize;
        public int dwRegisterID;
        public int dwGroupNo;
        public byte byType;
        public byte byLevel;
        public byte[] byRes1 = new byte[2];
        public NET_VCA_HUMAN_ATTRIBUTE struAttribute = new NET_VCA_HUMAN_ATTRIBUTE();
        public byte[] byRemark = new byte[32];
        public int dwFDDescriptionLen;
        public Pointer pFDDescriptionBuffer;
        public int dwFCAdditionInfoLen;
        public Pointer pFCAdditionInfoBuffer;
        public byte[] byRes2 = new byte[4];

        public NET_VCA_BLACKLIST_INFO() {
        }
    }

    class NET_VCA_BLACKLIST_INFO_ALARM extends SdkStructure {
        public NET_VCA_BLACKLIST_INFO struBlackListInfo = new NET_VCA_BLACKLIST_INFO();
        public int dwBlackListPicLen;
        public int dwFDIDLen;
        public Pointer pFDID;
        public int dwPIDLen;
        public Pointer pPID;
        public short wThresholdValue;
        public byte[] byRes = new byte[2];
        public Pointer pBuffer1;

        public NET_VCA_BLACKLIST_INFO_ALARM() {
        }
    }

    class NET_VCA_DEV_INFO extends SdkStructure {
        public NET_DVR_IPADDR struDevIP;
        public short wPort;
        public byte byChannel;
        public byte byIvmsChannel;

        public NET_VCA_DEV_INFO() {
        }
    }

    class NET_VCA_EVENT_UNION extends Union {
        public int[] uLen = new int[23];
        public NET_VCA_TRAVERSE_PLANE struTraversePlane;
        public NET_VCA_AREA struArea;

        public NET_VCA_EVENT_UNION() {
        }
    }

    class NET_VCA_FACESNAP_INFO_ALARM extends SdkStructure {
        public int dwRelativeTime;
        public int dwAbsTime;
        public int dwSnapFacePicID;
        public int dwSnapFacePicLen;
        public NET_VCA_DEV_INFO struDevInfo = new NET_VCA_DEV_INFO();
        public byte byFaceScore;
        public byte bySex;
        public byte byGlasses;
        public byte byAge;
        public byte byAgeDeviation;
        public byte byAgeGroup;
        public byte byFacePicQuality;
        public byte byRes1;
        public int dwUIDLen;
        public Pointer pUIDBuffer;
        public float fStayDuration;
        public Pointer pBuffer1;

        public NET_VCA_FACESNAP_INFO_ALARM() {
        }
    }

    class NET_VCA_FACESNAP_MATCH_ALARM extends SdkStructure {
        public int dwSize;
        public float fSimilarity;
        public NET_VCA_FACESNAP_INFO_ALARM struSnapInfo = new NET_VCA_FACESNAP_INFO_ALARM();
        public NET_VCA_BLACKLIST_INFO_ALARM struBlackListInfo = new NET_VCA_BLACKLIST_INFO_ALARM();
        public byte[] sStorageIP = new byte[16];
        public short wStoragePort;
        public byte byMatchPicNum;
        public byte byPicTransType;
        public int dwSnapPicLen;
        public Pointer pSnapPicBuffer;
        public NET_VCA_RECT struRegion = new NET_VCA_RECT();
        public int dwModelDataLen;
        public Pointer pModelDataBuffer;
        public byte byModelingStatus;
        public byte byLivenessDetectionStatus;
        public byte cTimeDifferenceH;
        public byte cTimeDifferenceM;
        public byte byMask;
        public byte bySmile;
        public byte byContrastStatus;
        public byte byBrokenNetHttp;

        public NET_VCA_FACESNAP_MATCH_ALARM() {
        }
    }

    class NET_VCA_FACESNAP_RESULT extends SdkStructure {
        public int dwSize;
        public int dwRelativeTime;
        public int dwAbsTime;
        public int dwFacePicID;
        public int dwFaceScore;
        public NET_VCA_TARGET_INFO struTargetInfo = new NET_VCA_TARGET_INFO();
        public NET_VCA_RECT struRect = new NET_VCA_RECT();
        public NET_VCA_DEV_INFO struDevInfo = new NET_VCA_DEV_INFO();
        public int dwFacePicLen;
        public int dwBackgroundPicLen;
        public byte bySmart;
        public byte byAlarmEndMark;
        public byte byRepeatTimes;
        public byte byUploadEventDataType;
        public NET_VCA_HUMAN_FEATURE struFeature = new NET_VCA_HUMAN_FEATURE();
        public float fStayDuration;
        public byte[] sStorageIP = new byte[16];
        public short wStoragePort;
        public short wDevInfoIvmsChannelEx;
        public byte byFacePicQuality;
        public byte byUIDLen;
        public byte byLivenessDetectionStatus;
        public byte byAddInfo;
        public Pointer pUIDBuffer;
        public Pointer pAddInfoBuffer;
        public byte byTimeDiffFlag;
        public byte cTimeDifferenceH;
        public byte cTimeDifferenceM;
        public byte byBrokenNetHttp;
        public Pointer pBuffer1;
        public Pointer pBuffer2;

        public NET_VCA_FACESNAP_RESULT() {
        }
    }

    class NET_VCA_HUMAN_ATTRIBUTE extends SdkStructure {
        public byte bySex;
        public byte byCertificateType;
        public byte[] byBirthDate = new byte[10];
        public byte[] byName = new byte[32];
        public NET_DVR_AREAINFOCFG struNativePlace = new NET_DVR_AREAINFOCFG();
        public byte[] byCertificateNumber = new byte[32];
        public int dwPersonInfoExtendLen;
        public Pointer pPersonInfoExtend;
        public byte byAgeGroup;
        public byte[] byRes2 = new byte[11];

        public NET_VCA_HUMAN_ATTRIBUTE() {
        }
    }

    class NET_VCA_HUMAN_FEATURE extends SdkStructure {
        public byte byAgeGroup;
        public byte bySex;
        public byte byEyeGlass;
        public byte byAge;
        public byte byAgeDeviation;
        public byte byEthnic;
        public byte byMask;
        public byte bySmile;
        public byte[] byRes = new byte[8];

        public NET_VCA_HUMAN_FEATURE() {
        }
    }

    class NET_VCA_LINE extends SdkStructure {
        public NET_VCA_POINT struStart;
        public NET_VCA_POINT struEnd;

        public NET_VCA_LINE() {
        }
    }

    class NET_VCA_POINT extends SdkStructure {
        public float fX;
        public float fY;

        public NET_VCA_POINT() {
        }
    }

    class NET_VCA_POLYGON extends SdkStructure {
        public int dwPointNum;
        public NET_VCA_POINT[] struPos = new NET_VCA_POINT[10];

        public NET_VCA_POLYGON() {
        }
    }

    class NET_VCA_RECT extends SdkStructure {
        public float fX;
        public float fY;
        public float fWidth;
        public float fHeight;

        public NET_VCA_RECT() {
        }
    }

    class NET_VCA_RULE_ALARM extends SdkStructure {
        public int dwSize;
        public int dwRelativeTime;
        public int dwAbsTime;
        public NET_VCA_RULE_INFO struRuleInfo;
        public NET_VCA_TARGET_INFO struTargetInfo;
        public NET_VCA_DEV_INFO struDevInfo;
        public int dwPicDataLen;
        public byte byPicType;
        public byte byRelAlarmPicNum;
        public byte bySmart;
        public byte byPicTransType;
        public int dwAlarmID;
        public short wDevInfoIvmsChannelEx;
        public byte byRelativeTimeFlag;
        public byte byAppendInfoUploadEnabled;
        public Pointer pAppendInfo;
        public Pointer pImage;

        public NET_VCA_RULE_ALARM() {
        }
    }

    class NET_VCA_RULE_INFO extends SdkStructure {
        public byte byRuleID;
        public byte byRes;
        public short wEventTypeEx;
        public byte[] byRuleName = new byte[32];
        public int dwEventType;
        public NET_VCA_EVENT_UNION uEventParam;

        public NET_VCA_RULE_INFO() {
        }

        public void read() {
            super.read();
            switch (this.wEventTypeEx) {
                case 1:
                    this.uEventParam.setType(NET_VCA_TRAVERSE_PLANE.class);
                    break;
                case 2:
                case 3:
                    this.uEventParam.setType(NET_VCA_AREA.class);
            }

            this.uEventParam.read();
        }

        public void write() {
            super.write();
            this.uEventParam.write();
        }
    }

    class NET_VCA_TARGET_INFO extends SdkStructure {
        public int dwID;
        public NET_VCA_RECT struRect;
        public byte[] byRes = new byte[4];

        public NET_VCA_TARGET_INFO() {
        }
    }

    class NET_VCA_TRAVERSE_PLANE extends SdkStructure {
        public NET_VCA_LINE struPlaneBottom;
        public int dwCrossDirection;
        public byte bySensitivity;
        public byte byPlaneHeight;
        public byte byDetectionTarget;
        public byte[] byRes2 = new byte[37];

        public NET_VCA_TRAVERSE_PLANE() {
        }
    }

    class NET_VCA_TRAVERSE_PLANE_DETECTION extends SdkStructure {
        public int dwSize;
        public byte byEnable;
        public byte byEnableDualVca;
        public byte[] byRes1 = new byte[2];
        public NET_VCA_TRAVERSE_PLANE[] struAlertParam = new NET_VCA_TRAVERSE_PLANE[8];
        public NET_DVR_SCHEDTIMEWEEK[] struAlarmSched = new NET_DVR_SCHEDTIMEWEEK[7];
        public NET_DVR_HANDLEEXCEPTION_V40 struHandleException;
        public int dwMaxRelRecordChanNum;
        public int dwRelRecordChanNum;
        public int[] byRelRecordChan = new int[64];
        public NET_DVR_SCHEDTIME[] struHolidayTime = new NET_DVR_SCHEDTIME[8];
        public byte[] byRes2 = new byte[100];

        public NET_VCA_TRAVERSE_PLANE_DETECTION() {
        }
    }

    enum REALSOUND_MODE {
        NONE,
        MONOPOLIZE_MODE,
        SHARE_MODE;

        REALSOUND_MODE() {
        }
    }

    class REMOTECONFIGSTATUS_CARD extends SdkStructure {
        public byte[] byStatus = new byte[4];
        public byte[] byErrorCode = new byte[4];
        public byte[] byCardNum = new byte[32];

        public REMOTECONFIGSTATUS_CARD() {
        }
    }

    enum SEND_MODE {
        PTOPTCPMODE,
        PTOPUDPMODE,
        MULTIMODE,
        RTPMODE,
        RESERVEDMODE;

        SEND_MODE() {
        }
    }

    class TTY_CONFIG extends SdkStructure {
        public byte baudrate;
        public byte databits;
        public byte stopbits;
        public byte parity;
        public byte flowcontrol;
        public byte[] res = new byte[3];

        public TTY_CONFIG() {
        }
    }

    class TimePointParam extends SdkStructure {
        public NET_DVR_TIME struTimePoint;
        public byte[] byRes = new byte[104];

        public TimePointParam() {
        }
    }

    class TimeSegParam extends SdkStructure {
        public NET_DVR_TIME struBeginTime;
        public NET_DVR_TIME struEndTime;
        public int dwInterval;
        public byte[] byRes = new byte[76];

        public TimeSegParam() {
        }
    }

    class UNION_PDC_STATPARAM extends Union {
        public NET_DVR_STATFRAME struStatFrame;
        public NET_DVR_STATTIME struStatTime;

        public UNION_PDC_STATPARAM() {
        }
    }

    enum _SDK_NET_ENV {
        LOCAL_AREA_NETWORK,
        WIDE_AREA_NETWORK;

        _SDK_NET_ENV() {
        }
    }

    class byte96 extends SdkStructure {
        public byte[] byMotionScope = new byte[96];

        public byte96() {
        }
    }

    interface fGPSDataCallback extends StdCallCallback {
        void invoke(int var1, int var2, Pointer var3, int var4, Pointer var5);
    }

    class struAlarmChannel extends SdkStructure {
        public int dwAlarmChanNum;

        public struAlarmChannel() {
        }
    }

    class struAlarmHardDisk extends SdkStructure {
        public int dwAlarmHardDiskNum;

        public struAlarmHardDisk() {
        }
    }

    class struIOAlarm extends SdkStructure {
        public int dwAlarmInputNo;
        public int dwTrigerAlarmOutNum;
        public int dwTrigerRecordChanNum;

        public struIOAlarm() {
        }
    }

    class struRecordingHost extends SdkStructure {
        public byte bySubAlarmType;
        public byte[] byRes1 = new byte[3];
        public NET_DVR_TIME_EX struRecordEndTime = new NET_DVR_TIME_EX();
        public byte[] byRes = new byte[116];

        public struRecordingHost() {
        }
    }

    class uStruAlarm extends Union {
        public byte[] byUnionLen = new byte[128];
        public struIOAlarm struioAlarm = new struIOAlarm();
        public struAlarmHardDisk strualarmHardDisk = new struAlarmHardDisk();
        public struAlarmChannel sstrualarmChannel = new struAlarmChannel();
        public struRecordingHost strurecordingHost = new struRecordingHost();

        public uStruAlarm() {
        }
    }

}

//播放库函数声明,PlayCtrl.dll
interface PlayCtrl extends StdCallLibrary {
    PlayCtrl INSTANCE = Native.load("PlayCtrl", PlayCtrl.class);

    int STREAME_REALTIME = 0;
    int STREAME_FILE = 1;

    boolean PlayM4_GetPort(NativeLongByReference nPort);

    boolean PlayM4_OpenStream(NativeLong nPort, ByteByReference pFileHeadBuf, int nSize, int nBufPoolSize);

    boolean PlayM4_InputData(NativeLong nPort, ByteByReference pBuf, int nSize);

    boolean PlayM4_CloseStream(NativeLong nPort);

    boolean PlayM4_SetStreamOpenMode(NativeLong nPort, int nMode);

    boolean PlayM4_Play(NativeLong nPort, HWND hWnd);

    boolean PlayM4_Stop(NativeLong nPort);

    boolean PlayM4_SetSecretKey(NativeLong nPort, NativeLong lKeyType, String pSecretKey, NativeLong lKeyLen);
}


//windows gdi接口,gdi32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用
interface GDI32 extends W32API {
    GDI32 INSTANCE = Native.load("gdi32", GDI32.class, DEFAULT_OPTIONS);

    int TRANSPARENT = 1;

    int SetBkMode(HDC hdc, int i);

    HANDLE CreateSolidBrush(int icolor);
}

//windows user32接口,user32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用
interface USER32 extends W32API {

    USER32 INSTANCE = Native.load("user32", USER32.class, DEFAULT_OPTIONS);

    int BF_LEFT = 0x0001;
    int BF_TOP = 0x0002;
    int BF_RIGHT = 0x0004;
    int BF_BOTTOM = 0x0008;
    int BDR_SUNKENOUTER = 0x0002;
    int BF_RECT = (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM);

    boolean DrawEdge(HDC hdc, RECT qrc, int edge, int grfFlags);

    int FillRect(HDC hDC, RECT lprc, HANDLE hbr);
}
